UITegmentedControl(带图像)在UITableViewCell(AutoLayout)中总是高29点

时间:2014-08-18 06:37:13

标签: ios uitableview autolayout uisegmentedcontrol

标准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分和乱码......

我做错了什么?或者这是UISegmentedControlAutoLayout的iOS错误? 当然我可以恢复到手动布局并只设置分段控件的框架 - 但我想使用AutoLayout ......

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

实施

-(CGSize)intrinsicContentSize
{
     CGSize          size = CGSizeMake(288, 68);

     return size;
}

在我的segmentedControl子类上。嗯,当然根据实际图像高度计算高度而不是使用68,但这可以...