如何在具有自动布局的容器视图中将 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 的大小设置为子视图的主要内容,如果未能解决你的问题,请参考以下文章