如何以流程布局方式安排标签?

Tim*_*the 7 iphone layout uikit

如何安排一些可变长度的UILabel和/或UIButton?我只想将它们添加到UITableViewCell中,它们应该以从左到右的方式排列,就像段落中的文本行一样.

我只发现使用"initWithFrame:..."创建具有固定大小和位置的标签的可能性.就我所知,Interface Builder似乎也是如此.无论是在代码中还是使用自定义单元格XIB文件,任何解决方案都会受到赞赏.

yab*_*ada 1

UITableViewCellUILabel、 和UIButton都是 的子类UIView,其文档UIView说明:

布局和子视图管理

  • 一个视图可以包含零个或多个子视图。
  • 每个视图都定义了与其父视图相关的默认大小调整行为。
  • 视图可以根据需要手动更改其子视图的大小和位置。

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

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

然后,在您的自定义子类中,UITableViewCell您可以通过覆盖默认行为(不执行任何操作)来layoutSubviews:设置子视图框架的原始字段(即 CGRect)来实现您的解决方案,该字段将在单元格的内容视图中定位子视图(大小)已经设定了)。您可能需要致电setNeedsLayout:layoutIfNeeded:

这实际上是如何实现解决方案的粗略概述,因为遗漏了很多细节。例如,如果您根据 的文本调整按钮的大小,titleLabel您可能需要将一些内容填充到宽度和高度,否则按钮将是标签的大小并且看起来很奇怪。在该layoutSubviews:方法中,可能有相当多的逻辑来按照您想要的方式布局标签和按钮(例如,如果单元格的所有子视图都具有相同类型(例如所有标签),则会更简单)。子视图是否可以换行。