何时尊重 preferredContentSize?
Posted
技术标签:
【中文标题】何时尊重 preferredContentSize?【英文标题】:When is preferredContentSize respected? 【发布时间】:2014-10-28 15:19:54 【问题描述】:我有一个表格视图控制器,它在viewDidLoad
之后设置它的内容。设置新内容时,我计算preferredContentSize
。在呈现弹出框之前,我可以查询我的视图控制器的preferredContentSize
,这是正确的。但是在演示之后,我得到了弹出框的标准尺寸(320x480)。如果我将setPopoverContentSize:animated:
与之前查询的值一起使用,则一切正常。
我现在的问题是为什么它一开始就不尊重preferredContentSize
?我做错了什么?
【问题讨论】:
【参考方案1】:现在我又遇到了同样的问题。如果我把我的桌子高度计算到viewWillAppear
中,它就会起作用:
public override void ViewWillAppear (bool animated)
base.ViewWillAppear (animated);
TableView.LayoutIfNeeded ();
this.PreferredContentSize = new SizeF (320f, TableView.ContentSize.Height);
代码在 C# 中,但您可以轻松地将其转换为 Objective-C 或 Swift。
【讨论】:
这个解决方案非常适合我。谢谢 :D:D:D:D 在 ViewWillAppear() 中这样做并不完全正确,因为表格尚未绘制并且不知道其大小(以及单元格的大小)。所以 TableView.LayoutIfNeeded 是没用的,除非你的表格有恒定的单元格高度并相应地设置。 @CynichniyBandera:你建议什么?应该在哪里调用? @testing 一个普遍的建议是在 viewDidLayoutSubviews() 代码路径中,当视图及其子视图已经获得它们的实际大小(包括本地化字符串、带有省略号的截断标签等) PS。你不需要重新布置你的桌子。在 viewDidLayoutSubviews() 中它已经更新了。 @CynichniyBandera:感谢您的回复。听起来很合理。下次遇到这个问题我会试试的。如果需要,请随时添加答案:)【参考方案2】:我将测试代码转换为 Swift 2.0。
override func viewWillAppear(animated: Bool)
super.viewWillAppear(animated)
tableView.layoutIfNeeded()
preferredContentSize.height = tableView.contentSize.height
【讨论】:
以上是关于何时尊重 preferredContentSize?的主要内容,如果未能解决你的问题,请参考以下文章
UIPresentationController preferredContentSize 更新动画
PopoverView 控制器中的问题 PreferredContentSize
preferredContentSize更改窗口大小在osx 10.12.6中不起作用