gpt4 book ai didi

ios - 在 iOS 中创建 'flow layout' 类型布局的最佳/最简单方法是什么

转载 作者:可可西里 更新时间:2023-11-01 03:44:42 25 4
gpt4 key购买 nike

Q1。我在一行中有三个控件:UILabelUIButtonUILabel。我想以编程方式将它们一个接一个地排成一行,没有任何间隙(类似于 Java/Android“Flowlayout”布局),因为每个控件上的文本长度会因用户操作而改变。以编程方式实现“Flowlayout”布局的最佳/最简单方法是什么?

Q2。与上述相关,我希望每个控件在文本因用户操作而更改时自动调整大小,以便完整文本保持可见。

提前致谢。

//2011 年 11 月 12 日编辑

下面是我计划如何实现包含在 viewArray 中的控件的水平“流式布局”:

-(void) doHorizontalFlowLayout:(NSArray *) viewArray
{
if(viewArray == nil || viewArray.count <=1
return; //get out of here, no need to continue

UIView *v0= (UIView *) [viewArray objectAtIndex:0]; // first view
CGRect frame0 = v0.frame;

CGFloat sumWidth= 0;
for(int i=1; i < viewArray.count; i++)
{
UIView *thisView= (UIView*) [viewArray objectAtIndex:i];
sumWidth = sumWidth+ v0.frame.size.width;
CGRect nextFrame= CGRectMake(frame0.origin.x
+sumWidth, thisView.frame.origin.y,
thisView.frame.size.width, thisView.frame.size.height);
thisView.frame= nextFrame;
//the above works for 2 views only. For more than 2 views - reset v0 to point to the ith view
v0 = (UIView*) [viewArray objectAtIndex:i];

}
}

最佳答案

正在为此苦苦挣扎——这是我的解决方案:

在iOS中没有“流式布局”的概念,所以你必须手动计算每个控件的宽度并将它们绝对放置在父容器中。 UILabel 与按钮有点不同,因为确定内容大小的唯一方法是使用 [NSString sizeWithFont:...] 方法。参见 here举个例子。

在您的情况下,无论哪个元素发生变化,您都必须监听用户交互何时完成,并使用 [UIView setNeedsDisplay] (http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/setNeedsDisplay) 重绘 View 和 subview 的方法。

恕我直言,这比需要的要困难得多。

关于ios - 在 iOS 中创建 'flow layout' 类型布局的最佳/最简单方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com