在我的子视图控制器的viewDidLoad
中UITableViewController
)我在调用contentSize.Height
后获得了layoutIfNeeded
。比我用这些值设置preferredContentSize
。在我的容器的viewDidLoad
(拥有这个孩子)中,我还根据孩子preferredContentSize
设置了preferredContentSize
。这适用于iOS 8,但不适用于iOS 7。
我知道在容器的viewDidLoad
之后调用子视图控制器的viewDidLoad
。
如何获取子视图的表视图大小,或者如何强制子视图在容器之前布局其子视图?
答案 0 :(得分:0)
您可以尝试在加载所有视图后发送布局请求:
// In the container
-(void) viewDidLoad {
// ...
[self.view performSelector:@selector(setNeedsLayout) withObject:nil afterDelay:0];
}
答案 1 :(得分:0)
我最终得到了以下内容:
在子视图控制器中,我创建了一个单独的方法,该方法获取表视图的值。之后我设置了首选内容大小。
public void setDocumentList(List<string> documentList){
this.documentList = documentList;
this.TableView.ReloadData ();
// adjust size for popover
float height = TableView.ContentSize.Height;
if (this.View.Bounds.Height > 0) {
// limit the max size of the popover
height = Math.Min (this.View.Bounds.Height, height);
}
this.PreferredContentSize = new SizeF (320f, height);
}
在我的容器中我有类似的功能,但在这里我只设置了首选的内容大小。
public void setDocumentList(List<string> documentList){
documentListController.setDocumentList (documentList);
this.PreferredContentSize = documentListController.PreferredContentSize;
// some autolayout constraints ...
}
这种作品。我得到正确的值,但弹出窗口的值在开始时是不正确的。如果有人想知道这是C#语言。我仍然愿意接受更好的解决方案。
答案 2 :(得分:0)
您可以通过调用父级中子级的viewDidLoad并强制tableview进行布局来加载子级的tableView。
// Parent.m
[Child view];
[self layoutParentViewsOrDoSomething];
// Child.m
-(void)viewDidLoad{
[super viewDidLoad];
[self layoutSubviews];
// or [tableView reloadData]...
}