使用 .xib 设计 Self-Sizing UITableViewCell,单元格不会在界面生成器中自行调整

Posted

技术标签:

【中文标题】使用 .xib 设计 Self-Sizing UITableViewCell,单元格不会在界面生成器中自行调整【英文标题】:Design Self-Sizing UITableViewCell using .xib, cell doesn't adjust itself in interface builder 【发布时间】:2020-10-26 11:38:39 【问题描述】:

我正在尝试使用 .xib 文件来设计一个自调整大小的 UITableViewCell。但是,单元格不会根据其内容子视图调整其高度。我必须手动调整单元格。如果单元格太大,子视图将被拉伸以填充单元格。如果单元格太小,界面生成器会出现一些约束错误警报。

UI在运行时是正确的,但在设计时就坏了。

当使用 .storyboard 文件来设计一个自定大小的单元格时,效果很好。细胞可以自动生长或收缩。

这是 .xib 文件的限制吗?还是我错过了什么?

【问题讨论】:

【参考方案1】:

如果您正确设置约束,UILabel 将根据设置的约束及其内容设置其高度和宽度。

你需要做的就是……

对于第一个标签,您需要设置前导、顶部和尾随约束 对于第二个标签,您需要设置前导,顶部约束和第一个约束的底部,最后是超级视图的尾随和底部约束。

不要忘记在属性检查器中将行数设置为零&换行模式为自动换行。

还需要设置如下

【讨论】:

【参考方案2】:

我们的可能 em>的认为这是一种 “限制” ...但它更多的事情 “的设计。” P>

当在故事板铺设UI元素(包括原型细胞),界面生成器(的 IB 强>)做了很多额外的工作。对于一个明显的例子,可以改变定位与你的原型细胞会自动扩大其宽度。 P>

在开发厦门国际银行,不过,IB不会改变你的根视图对自己的大小。把它看成是IB说:“你设计的是厦门国际银行,你知道你在做什么,你知道你想要什么。” P>

虽然它遵循IB的意见,并摆脱它不需要任何“约束错误警报”的通常是一个好主意。 P>

是 EM>设计在一个XIB的小区(或其它视图)当合法情况下,您的不能强> em>的消除所有约束警告。例如,如果我把UIScrollView我的细胞XIB,但滚动视图不会有任何内容,直到运行时,IB会告诉我它有“暧昧滚动内容的大小。”在这种情况下,我知道我的约束是正确的,我知道 STRONG>内容大小将不会被定义,直到我在运行时添加和约束子视图...等等我可以忽略该警告。

如果你觉得这是一个麻烦来手动调整电池,但看不到约束的警告,你可以(在这个例子中),如果你的最底端的约束是零,给它999的优先级,或将其设置为>= 0 ...或者,改变歧义选项之一:

或:

【讨论】:

【参考方案3】:

首先设置第一个标签的上、左、右约束和第二个标签与单元格的下、上、右、左约束。

 Set Lines of labels to 0 then it will work as you are expecting.

【讨论】:

以上是关于使用 .xib 设计 Self-Sizing UITableViewCell,单元格不会在界面生成器中自行调整的主要内容,如果未能解决你的问题,请参考以下文章

无法在代码中更改 .xib UI 对象的框架

关于代码手写UI,xib和StoryBoard

代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧

Xcode使用介绍之二:创建UI界面+连线

使用Swift在Xcode 9中不显示IBDesignable UI

UITableView:默认开启Self-Sizing