如何在具有自动布局的容器视图中将 UITableView 的大小设置为子视图

Posted

技术标签:

【中文标题】如何在具有自动布局的容器视图中将 UITableView 的大小设置为子视图【英文标题】:How do I set the size of UITableView as a subview in a Container View with Auto-layout 【发布时间】:2015-03-04 15:18:57 【问题描述】:

我目前有一个 UIViewController,它包含一个菜单栏和容器 UIView。

在主视图加载时,容器有一个嵌入 segue,其中包含一个单独的主内容 UIViewController。

当我单击菜单栏中的按钮时,我设置了一个自定义 segue,以使用以下代码将 UITableViewController 加载到 UIView 容器中

-(void) perform 
    BlockDetailViewController *src = (BlockDetailViewController *)[self sourceViewController];
    UIViewController *dst = (UIViewController *)[self destinationViewController];

    //Clear view of all subviews
    for (UIView *view in src.viewContainer.subviews) 
        [view removeFromSuperview];
    
    //save destination
    src.currentViewController = dst;

    //set placeholderOutlet to destination
    [src.viewContainer addSubview:dst.view];

这会将 UITableViewController 加载到 UIView 中,但是,UITableViewController 的大小似乎设置为默认窗口大小,这意味着 UITableViewController 的底部单元格隐藏在视图之外。如果您向上拖动,您可以看到它们,但当您松开弹跳时,它们会从视图中消失。

如何确保 UITableViewController 的大小与其所在的 UIView 大小相同?

谢谢

【问题讨论】:

【参考方案1】:

您只需创建一个 CGRect(框架)并将其设置为视图框架:

dst.view.frame = CGRectMake( CGRectGetMinX(self.view.frame),
                             CGRectGetMinY(self.view.frame), 
                             CGRectGetWidth(self.view.frame), 
                             CGRectGetHeight(self.view.frame);

这些值应该是浮点值。这只是一个例子。

【讨论】:

这几乎是正确的。我已经设法通过执行以下操作来解决它; ` dst.view.frame = CGRectMake(0.0, 0.0, src.viewContainer.frame.size.width,src.viewContainer.frame.size.height); ` 因为 src.viewContainer 是接收新视图的容器。 就像我写的那样,这只是一个将其设置为与父视图相同大小的示例。但是尝试使用 CGRect 宏,您可以使用更多的宏来获取帧的特定值,并且它比通过点运算符访问帧的位置更具可读性 因为这发生在 Segue 中,所以 self.view.frame 将无法工作,因为 self 是 Segue。以防其他人尝试使用此代码。 如果代码位于扩展 Segue 的类中,您可能会以不同的方式传递值。也许在你的 segue 上设置新属性,你可以在 segue 到你的下一个 UIViewController 之前设置一个 CGRect 值。您只显示了代码的一部分,因此并不清楚您来自哪里以及去哪里。【参考方案2】:

定义dst时,可以使用CGRect来设置它的位置、宽度和高度。

【讨论】:

你有一个例子来说明它是如何工作的吗?谢谢

以上是关于如何在具有自动布局的容器视图中将 UITableView 的大小设置为子视图的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局,如何在 NSSplitView 中将子视图居中而不强制宽度 NSSplitView 为静态?

使用自动布局扩展方形视图以填充矩形超级视图

使用自动布局将具有不同高度的多个视图居中

具有动态大小的单元格的复杂自动布局

滚动视图不在自动布局 xcode 6.4 中滚动

自动布局如何在具有 3 个等宽视图的视图中隐藏 1 个视图