自动收缩标签,但每个其他UITableViewCell保持相同的字体大小

时间:2016-03-02 10:21:12

标签: ios swift

我的应用程序中的用户列表存储在UITableView中。

每个Cell都有一个标签,用于存储用户名。

我需要所有这些标签保持相同的尺寸。

我的主要问题是自动调整每个名称标签的字体大小会在tableview中产生多种不同的标签尺寸

所以举个例子 “汤姆史密斯”很短,所以字体大小最大 “Tommy Smithenson”,更长。在较小的设备上,它可能会调整大小 “Smitty Werbenjagermanjensen”绝对太长了,将会重新调整大小。

我需要每个tableView单元格根据内容更新其UILabel字体大小,如果标签缩小,则收缩所有。

我不认为通过cellForRowAtIndexPath进行黑客操作会起作用,因为滚动时可能会出现一个更大的名称,导致某些单元格具有不同大小的标签,至少在我再次滚动它们并且它们已经出列之前。

此时我不知道如何使用Autolayout,我更喜欢这样做。

有关如何最好地完成此任务的任何想法?

2 个答案:

答案 0 :(得分:2)

You have two options.

1) STATIC APPROACH - Before you show your table view list, find the longest name in your contact list, calculate the font size that satisfies the layout requirements using function

func boundingRectWithSize(_ size: CGSize,
              options options: NSStringDrawingOptions,
           attributes attributes: [String : AnyObject]?,
              context context: NSStringDrawingContext?) -> CGRect

and set this font size to all cells.

2) DYNAMIC APPROACH - start with cells as you have it now, and once a cell get's to layoutSubviews, use notification centre to post the current size, and listen to this notification in all other cells, and if the size is smaller then their current one, apply it.

答案 1 :(得分:0)

尝试设置,

  1. UILabel中的第0行
  2. 在标签
  3. 中设置最小高度和宽度
  4. 在标签的所有4个边设置约束。