【发布时间】:2014-08-18 06:37:12
【问题描述】:
标准Tableview 应用程序。自动布局。每个(单元)类都有自己的 .xib 文件,没有情节提要。
我在tableview 单元格中有一个分段控件(几乎)完全填充它,所有 4 条边都用 6 点空间绑定到它的容器(=tableViewCell 的内容视图)。这些片段是由图像而非文本组成的。
我希望当我调用-[setImage: forSegmentAtIndex:] 时,控件会更改其固有内容大小以为分段图像腾出足够的空间——尤其是视图高度。
我确实将它的 Content Hugging Priority 设置为 251(并且单元格的拥抱优先级保持在默认值 250),所以当我使用窄图像时,分段控制高度应该缩小(并且单元格内容视图高度也应该缩小)。当我使用更大的图像时,分段控制高度应该会增加......
我通过测量一个不可见的参考单元来计算正确的高度(我自己在-[viewDidLoad] 中出列并保存在viewController 属性中),
为参考单元格的 contentView 询问 -[systemLayoutSizeFittingSize:UILayoutFittingCompressedSize] 的自动布局。这很好用,对于不同的图像,我可以在 -[tableView heightForRowAtIndexPath] 中返回不同的尺寸。所以AutoLayout 计算出要正确使用的高度。
但tableView 的真实(可见)单元格不会改变分段控件的高度。无论使用什么 cellHeight 以及设置什么图像,它始终保持在 29 点(这是带有文本标签而不是图像的分段控件的标准高度)。
我尝试在分段控件中添加另一个NSLayoutConstraint,我只是在其中设置了它的高度:
heightConstraint = [NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationGreaterThanOrEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:newHeight];
并将其(一次)添加到分段控件中。当我尝试NSLayoutRelationEqual 时,我得到“无法同时满足约束”,这就是我使用NSLayoutRelationGreaterThanOrEqual 的原因。 (可能计算 newHeight 值错误)。
但它仍然不起作用 - 29点和片段中的乱码......
我做错了什么?或者这是 UISegmentedControl 和 AutoLayout 的 iOS 错误?
当然我可以恢复到手动布局并设置分段控件的框架 - 但我想使用AutoLayout...
【问题讨论】:
标签: ios uitableview autolayout uisegmentedcontrol