2010-06-01 23 views
7

如何安排一些可变长度的UILabel和/或UIButtons?我只是想将它们添加到UITableViewCell中,它们应该按照从左到右的顺序排列,就像段落中的文本行一样。如何以流线布局方式安排标签?

我只发现可能性,创造使用“initWithFrame:方法...”具有固定的大小和位置标贴。就我所知,Interface Builder似乎也是如此。无论是在代码中还是使用自定义单元格XIB文件完成任何解决方案。

回答

1

UITableViewCellUILabel,和UIButtonUIView所有子类和UIView的文件说:

布局和子视图管理

  • 视图可以包含零级或更多的子视图。
  • 每个视图定义相对于其父视图自己的默认大小调整行为。根据需要
  • 一个视图可以手动改变它的子视图的大小和位置。

所以,这当然是可以做到的。

您可以使用initWithFrame:的说法CGRectZero你的标签和按钮,然后调整它们的大小(基于文本或其他)使用setBounds:setFrame:(因为现在你只是要设置视图的大小) 。然后,将这些视图添加为单元格contentView的子视图。

然后,在UITableViewCell定制子类可以通过重写的layoutSubviews:默认行为(这什么都不做)来设置子视图的帧的原始字段(即的CGRect),将定位在子视图实现解决方案单元格的内容视图(大小已经设置)。您可能需要致电setNeedsLayout:layoutIfNeeded:

这实际上是如何可能的,因为有漏掉很多细节实现解决方案的粗略轮廓。例如,如果您基于titleLabel的文本调整按钮大小,则可能需要在宽度和高度上填充一些按钮,否则该按钮将是标签的大小,并且看起来很奇怪。在layoutSubviews:方法可能有逻辑布局的标签和按钮您想要的方式相当数量的(例如,它会更简单,如果一个小区的所有子视图相同类型:其中,如所有标签)的ESP。如果子视图可以换行到新行。

0

我想要做同样的事情,以让用户输入标签的文本字段 - 有点像如何,当你在一个电子邮件地址类型,地址被转换成蓝色标签(该用户名时用户的电子邮件地址已经在您的联系人列表中)。还没有写下来,但一旦我这样做,很乐意与您分享。不幸的是,我不能承诺我会花多长时间来写这篇文章。但是,如果没有其他人有代码,他们可以共享,你需要快速完成工作 - 作为提示,考虑这一点:

创建标签视图对象,其中每个对象知道父文本字段/标签容器的大小视图和每个标记对象都有一个实用程序方法,其中一个标记对象可以使用该方法将其自身插入到正确的位置。这种方法可以使用简单的迭代流程轻松管理视图和重新布局标签。

+0

嗨,你可能想问这是一个新的问题,因为它不是一个很好的回答我的问题。但是,我现在已经不在这个话题了,如果我回到那个项目,我会研究这个问题...... – 2011-01-10 09:36:37

0

嗨 如果您仍需要一个答案...... 要获得文本的大小(以及再计算出的UILabel/UIButton的等的帧)使用sizeWithFont:NSString的功能,这将给你的宽度/高度使用指定字体的文本字符串。

有一点数学,你需要做的工作,以找出最合适的,放置UILabels和间距,但你将有数据,你需要这样做。

希望这会有所帮助!

1

对于多行UILabels来获取宽度和高度,您应该使用NSString方法sizeWithFont:constrainedToSize:lineBreakMode:然后可以使用您获得的尺寸将所有尺寸放在需要的位置。