0

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

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

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

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

4

1 回答 1

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 - 示例自动布局
于 2012-11-12T22:15:22.300 回答