这不是模拟器中的错误。
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 - 示例自动布局