1

viewDidLoad我的子视图控制器(UITableViewController)中,我得到了contentSize.Heightafter call layoutIfNeeded。比我preferredContentSize用这些值设置的。在viewDidLoad我的容器(包含这个孩子)中,我还preferredContentSize根据孩子的preferredContentSize. 这适用于 iOS 8,但不适用于 iOS 7。

我知道viewDidLoad子视图控制器的 是viewDidLoad在容器之后调用的。

如何获取子视图的表格视图大小,或者如何强制子视图在容器之前布局其子视图?

4

3 回答 3

0

您可以尝试在所有视图加载后发送布局请求:

// In the container
-(void) viewDidLoad {

    // ...

    [self.view performSelector:@selector(setNeedsLayout) withObject:nil afterDelay:0];

}
于 2014-10-28T11:33:39.387 回答
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# 语言。我仍然愿意寻求更好的解决方案。

于 2014-10-28T15:29:57.820 回答
0

可以通过调用父级中子级的viewDidLoad来加载子级的tableView,并强制tableview进行布局。

// Parent.m
[Child view];
[self layoutParentViewsOrDoSomething];

// Child.m

-(void)viewDidLoad{
 [super viewDidLoad];
 [self layoutSubviews];
// or [tableView reloadData]... 
}
于 2015-08-05T18:00:11.023 回答