【发布时间】:2014-05-22 18:46:03
【问题描述】:
我正在尝试使用自动布局来自动调整弹出框的大小以适应其内容。我已经固定了弹出框宽度,但要计算高度,我依赖 systemLayoutSizeFittingSize: 传递我预定义的宽度和零高度,例如CGSizeMake(190, 0).
ContentController* controller = [ContentController new];
CGSize preferredSize = [controller.view systemLayoutSizeFittingSize:CGSizeMake(190, 0)];
controller.preferredContentSize = preferredSize;
UIPopoverController* popover = [[UIPopoverController alloc] initWithContentViewController:controller];
//popover presentation.
到目前为止,我当前的 ContentController 视图层次结构类似于(在 Interface Builder 中设置):
UILabel - multiline header (dynamically resized)
|
UIImage with fixed width / height (static size)
|
UILabel - multiline body (dynamically resized)
因此,我只需插入我的标题/正文文本,调用systemLayoutSizeFittingSize,它就会返回适合视图所有内容的有效大小。
当我尝试将我的正文标签放入 UIScrollView 时出现问题。 (在 IB 和代码中)。
从现在开始,systemLayoutSizeFittingSize 将不再考虑正文标签的高度,而是返回标题 + 图片的高度。
我已经在 IB 中设置了所有约束以支持 Pure Autolayout 方法。
我检查了滚动视图的内容大小 - 它确实等于正文标签的固有大小,但滚动视图的框架被压缩为 0。
我已经检查并尝试将标签的 maxPreferredLayoutWidth 重置为内容视图的宽度,但它似乎没有任何影响。
我已将每个视图上的 translatesAutoresizingMaskIntoConstraints 设置为 NO,但它没有任何效果。 我已经将两个标签和它的滚动视图的拥抱/压缩阻力优先级设置为 1000,但没有运气。在容器视图上设置它们也不起作用。
这是我的 IB 视图设置的屏幕截图:
我的猜测与弹出窗口托管视图及其自动布局约束有关,但我不确定。
我正在通过简单的方式更新我的标签
_textContainerHeaderLabel.text = headerText;
_textContainerBodyTextLabel.text = bodyText;
[self.view setNeedsUpdateConstraints];
[self.view layoutSubviews];
那么,主要问题 - 当它有 UIScrollViews 时,我如何通过自动布局计算视图的最佳拟合尺寸?
【问题讨论】:
标签: ios objective-c uiscrollview autolayout uipopovercontroller