【问题标题】:UISegmentedControl (with images) in UITableViewCell (AutoLayout) always 29 points highUITableViewCell(AutoLayout)中的 UISegmentedControl(带图像)始终高 29 点
【发布时间】: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点和片段中的乱码......

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

【问题讨论】:

    标签: ios uitableview autolayout uisegmentedcontrol


    【解决方案1】:

    我找到了解决办法:

    实现

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-08
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多