使用边界插入设置视图

时间:2012-11-12 22:09:39

标签: objective-c ios cocoa-touch uiviewcontroller ios-simulator

我使用“单一视图”应用程序模板启动了一个Xcode项目,并在viewDidLoad中的模板创建的ViewController类中添加了两行:

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectInset(self.view.bounds, 10, 10)];
[self.view addSubview:textView];

当我在 3.5英寸 iPhone模拟器中运行时,textview延伸到屏幕底部。我打算将它放在屏幕中央,有10个边框。

我错过了一些基本的东西吗?它似乎在4“​​模拟器中工作正常。它是模拟器错误吗?

1 个答案:

答案 0 :(得分:3)

这不是模拟器中的错误。

Xcode模板包含一个xib,其中xib是视图控制器的顶级视图(self.view),该视图的大小适合iPhone 5屏幕。

当系统向您的视图控制器发送viewDidLoad时,它尚未针对当前设备的屏幕大小调整该视图的大小。因此,您的文本视图的框架基于iPhone 5屏幕的大小。

您可以通过在视图上设置自动调整标记来解决此问题:

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectInset(self.view.bounds, 10, 10)];
[self.view addSubview:textView];
textView.autoresizingMask = UIViewAutoresizingFlexibleHeight
    | UIViewAutoresizingFlexibleWidth;

默认情况下,您的xib设置为使用自动布局,因此您还可以通过在文本视图和顶级视图之间设置约束来让系统调整文本视图的大小:

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectInset(self.view.bounds, 10, 10)];
[self.view addSubview:textView];
textView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addConstraints:[NSLayoutConstraint
    constraintsWithVisualFormat:@"H:|-10-[textView]-10-|" options:0 metrics:nil
    views:NSDictionaryOfVariableBindings(textView)]];
[self.view addConstraints:[NSLayoutConstraint
    constraintsWithVisualFormat:@"V:|-10-[textView]-10-|" options:0 metrics:nil
    views:NSDictionaryOfVariableBindings(textView)]];

如果将文本视图放在xib中而不是在代码中创建它,则可以使用xib编辑器(也称为“Interface Builder”或“IB”)来设置约束。我强烈建议您观看来自WWDC 2012的自动播放视频:

  • 会议202 - iOS和OS X自动布局简介
  • 会议228 - 掌握自动布局的最佳实践
  • 会话232 - 按示例自动布局