强制子视图填充父视图

7

我在每个选项卡视图控制器中放置了一些子视图。 现在,我使用像素计数对其进行调整大小,但仅适用于iPhone 4和4s而不适用于iPhone 5,因为后者具有更长的屏幕尺寸。 我可以检查设备,然后以相应的方式进行调整大小,但我觉得肯定有更简单的方法来解决这个问题。

viewController1.view.frame = CGRectMake(0, 0, 320, 460);

我将子视图着成黄色,这样更容易看到。

输入图片说明


1
通常情况下,您不应明确调整UIViewController视图的框架。 - Engin Kurutepe
3个回答

10
  1. 您不应更改选项卡栏内容视图控制器的视图框架。 UITabBar 会自行处理子视图控制器的框架大小。
  2. 如果您想向内容视图控制器(某个选项卡下的控制器)添加子视图,并使该视图始终自动调整大小以适应控制器的主视图(self.view),则可以使用父视图的框架和自动调整大小的组合。

示例代码(例如,在 -(void)viewDidLoad 中执行此操作):

UIView *view = [[UIView alloc] initWithFrame:self.view.bounds];
view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:view];

这个几乎完全可行了。现在,在导航栏正下方的视图顶部有一个大约 20-30 像素的白色空间。 - centree
你的视图结构是什么样子的?这段代码必须正常工作。你使用半透明导航栏吗?你确定你没有对框架进行手动调整吗?另外:你真的需要一个与 self.view 相同大小的自定义视图吗?你不能只使用 self.view 吗? - Lukas Kukacka
我认为你关于状态栏的说法是正确的。这个间隙与它的高度相同。 - centree
你为什么要创建空视图?我的代码只是样例!像样例一样配置你的视图。执行 __MY_STATIC_CDVViewController.view.frame = self.view.bounds; __MY_STATIC_CDVViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight,不要添加 view,它是无用的。 - Lukas Kukacka
不用谢。但我还是不明白为什么你只创建控制器并将其视图添加为子视图。你的代码仍然不会很好地工作。你需要添加子视图控制器,或者最简单的解决方案:将你的控制器作为UINavigationController的根视图控制器。 - Lukas Kukacka
显示剩余2条评论

5
如果您想通过设置框架来实现这一点,请按照以下步骤操作:
[childView setFrame:childView.superview.bounds];

1

您的视图控制器中的主视图应该已经是屏幕上可用空间的大小。通常,如果您想让一个视图与其父视图相同大小,可以使用 view.frame = view.superview.frame,但我怀疑在调用视图控制器的视图上这样做可能不是一个好主意。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接