如何安排一些可变长度的UILabel和/或UIButtons?我只是想将它们添加到UITableViewCell中,它们应该按照从左到右的顺序排列,就像段落中的文本行一样。如何以流线布局方式安排标签?
我只发现可能性,创造使用“initWithFrame:方法...”具有固定的大小和位置标贴。就我所知,Interface Builder似乎也是如此。无论是在代码中还是使用自定义单元格XIB文件完成任何解决方案。
如何安排一些可变长度的UILabel和/或UIButtons?我只是想将它们添加到UITableViewCell中,它们应该按照从左到右的顺序排列,就像段落中的文本行一样。如何以流线布局方式安排标签?
我只发现可能性,创造使用“initWithFrame:方法...”具有固定的大小和位置标贴。就我所知,Interface Builder似乎也是如此。无论是在代码中还是使用自定义单元格XIB文件完成任何解决方案。
UITableViewCell
,UILabel
,和UIButton
是UIView
所有子类和UIView
的文件说:
布局和子视图管理
- 视图可以包含零级或更多的子视图。
- 每个视图定义相对于其父视图自己的默认大小调整行为。根据需要
- 一个视图可以手动改变它的子视图的大小和位置。
所以,这当然是可以做到的。
您可以使用initWithFrame:
的说法CGRectZero
你的标签和按钮,然后调整它们的大小(基于文本或其他)使用setBounds:
或setFrame:
(因为现在你只是要设置视图的大小) 。然后,将这些视图添加为单元格contentView
的子视图。
然后,在UITableViewCell
定制子类可以通过重写的layoutSubviews:
默认行为(这什么都不做)来设置子视图的帧的原始字段(即的CGRect),将定位在子视图实现解决方案单元格的内容视图(大小已经设置)。您可能需要致电setNeedsLayout:
或layoutIfNeeded:
。
这实际上是如何可能的,因为有漏掉很多细节实现解决方案的粗略轮廓。例如,如果您基于titleLabel
的文本调整按钮大小,则可能需要在宽度和高度上填充一些按钮,否则该按钮将是标签的大小,并且看起来很奇怪。在layoutSubviews:
方法可能有逻辑布局的标签和按钮您想要的方式相当数量的(例如,它会更简单,如果一个小区的所有子视图相同类型:其中,如所有标签)的ESP。如果子视图可以换行到新行。
我想要做同样的事情,以让用户输入标签的文本字段 - 有点像如何,当你在一个电子邮件地址类型,地址被转换成蓝色标签(该用户名时用户的电子邮件地址已经在您的联系人列表中)。还没有写下来,但一旦我这样做,很乐意与您分享。不幸的是,我不能承诺我会花多长时间来写这篇文章。但是,如果没有其他人有代码,他们可以共享,你需要快速完成工作 - 作为提示,考虑这一点:
创建标签视图对象,其中每个对象知道父文本字段/标签容器的大小视图和每个标记对象都有一个实用程序方法,其中一个标记对象可以使用该方法将其自身插入到正确的位置。这种方法可以使用简单的迭代流程轻松管理视图和重新布局标签。
嗨 如果您仍需要一个答案...... 要获得文本的大小(以及再计算出的UILabel/UIButton的等的帧)使用sizeWithFont:NSString的功能,这将给你的宽度/高度使用指定字体的文本字符串。
有一点数学,你需要做的工作,以找出最合适的,放置UILabels和间距,但你将有数据,你需要这样做。
希望这会有所帮助!
对于多行UILabels来获取宽度和高度,您应该使用NSString方法sizeWithFont:constrainedToSize:lineBreakMode:然后可以使用您获得的尺寸将所有尺寸放在需要的位置。
嗨,你可能想问这是一个新的问题,因为它不是一个很好的回答我的问题。但是,我现在已经不在这个话题了,如果我回到那个项目,我会研究这个问题...... – 2011-01-10 09:36:37