标准Tableview
应用。自动布局。每个(单元格)类都有自己的.xib文件,没有故事板。
我在tableview
单元格中有一个分段控件(几乎)完全填充它,所有4个边缘与其容器的6个点空间绑定(= tableViewCell
的内容视图)。这些片段是由图像而不是文本构成的。
我希望当我调用-[setImage: forSegmentAtIndex:]
时,控件会更改其内在内容大小,以便为段图像提供足够的空间 - 尤其是视图高度。
我确实将其内容拥抱优先级设置为251(并且单元格的拥抱优先级保持默认值为250),因此当我使用窄图像时,分段控制高度应该缩小(以及单元格内容视图高度也是如此)。当我使用更大的图像时,分段的控制高度应该增长......
我通过测量一个不可见的参考单元(在-[viewDidLoad]
中将自己出列并保存在viewController
属性中)来计算正确的高度,
向Autolayout询问-[systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]
参考单元格的contentView。这工作正常,我在-[tableView heightForRowAtIndexPath]
为不同的图像返回不同的大小。因此AutoLayout
计算要正确使用的高度。
但是tableView
的真实(可见)单元格不会改变分段控件的高度。它总是保持在29点(这是带有文本标签而不是图像的分段控件的标准高度),无论使用cellHeight
和设置什么图像。
我尝试将另一个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
......
答案 0 :(得分:0)
我找到了解决方案:
实施
-(CGSize)intrinsicContentSize
{
CGSize size = CGSizeMake(288, 68);
return size;
}
在我的segmentedControl子类上。嗯,当然根据实际图像高度计算高度而不是使用68,但这可以...