如何安排一些可变长度的UILabel和/或UIButton?我只想将它们添加到UITableViewCell中,它们应该以从左到右的方式排列,就像段落中的文本行一样。
我只发现使用“initWithFrame:...”创建具有固定大小和位置的标签的可能性。就我所知,Interface Builder似乎也是如此。无论是在代码中还是使用自定义单元格XIB文件,任何解决方案都会受到赞赏。
答案 0 :(得分:1)
UITableViewCell
,UILabel
和UIButton
都是UIView
的子类,UIView
的文档说:
布局和子视图管理
- 视图可能包含零个或多个子视图。
- 每个视图都定义了与其父视图相关的默认大小调整行为。
- 视图可以根据需要手动更改其子视图的大小和位置。
所以,这当然是可能的。
您可以使用initWithFrame:
使用参数CGRectZero
创建标签和按钮,然后使用setBounds:
或setFrame:
调整它们(基于文本或其他内容)(因为现在你只是要设置视图的大小)。然后,将这些视图添加为单元格的contentView
。
然后,在UITableViewCell
的自定义子类中,您可以通过覆盖layoutSubviews:
的默认行为(无效)来设置子视图帧的原点字段(即CGRect)来实现您的解决方案将子视图定位在单元格的内容视图中(已设置大小)。您可能需要致电setNeedsLayout:
或layoutIfNeeded:
。
这实际上是如何实现解决方案的粗略概述,因为遗漏了很多细节。例如,如果您根据titleLabel
的文本调整按钮大小,您可能希望将某些按钮填充到宽度和高度,否则按钮将是标签的大小并且看起来很奇怪。在layoutSubviews:
方法中,可能有相当多的逻辑来按照您想要的方式布置标签和按钮(例如,如果单元格的所有子视图都是相同类型的所有子视图,例如所有标签,则会更简单) ESP。如果子视图可以换行到新行。
答案 1 :(得分:1)
对于获取宽度和高度的多线UILabel,您应该使用NSString方法sizeWithFont:constrainedToSize:lineBreakMode:然后您可以使用所获得的大小将所有内容放在需要的位置。
答案 2 :(得分:0)
我想做同样的事情,允许用户在文本字段中输入标签 - 有点像当您输入电子邮件地址时,地址被转换为蓝色标签(用户名称在用户名称时)电子邮件地址已在您的联系人列表中)。尚未撰写,但我很乐意与您分享。不幸的是,我不能承诺写这篇文章需要多长时间。但是,如果没有其他人拥有他们可以共享的代码,您需要快速完成工作 - 就像提示一样,请考虑一下:
创建标记视图对象,其中每个对象都知道父文本字段/标记容器视图的大小,以及每个标记对象具有实用程序方法的位置,另一个标记对象可以使用该方法将自身插入到正确的位置。这种方法可以使用简单的迭代流程轻松管理视图和重新布局标记。
答案 3 :(得分:0)
您好 如果你还需要答案...... 要获得文本的大小(然后计算UILabel / UIButton的框架等),请使用sizeWithFont:NSString函数,它将使用指定的字体为您提供文本字符串的宽度/高度。
您需要做一些数学计算,以确定最佳拟合,放置UILabel的位置和间距,但您将拥有执行此操作所需的数据。
希望这有帮助!