【问题标题】:CGRectMake doesn't workCGRectMake 不起作用
【发布时间】:2014-09-28 13:04:17
【问题描述】:

我正在研究“iOS Programming Cookbook”中基于 iOS 7 的示例。我需要创建 UITextField 并将其添加到 ViewController

ViewController.m 我有:

- (void) viewDidLoad {
    [super viewDidLoad];
    [self createField];  
}

- (void) createField {
    self.textField = [[UITextField alloc] initWithFrame:CGRectMake(20.0f, 35.0f, 280.0f, 30.0f)];
    self.textField.translatesAutoresizingMaskIntoConstraints = NO;
    self.textField.borderStyle = UITextBorderStyleRoundedRect;
    self.textField.placeholder = @"Enter text to share";
    self.textField.delegate = self;
    [self.view addSubview:self.textField];
}

在书的截图上textField出现在状态栏下方屏幕宽度的中间,但是当我运行它时textField出现在状态栏后面的屏幕左上角。

也许问题是,我在 iOS 8 的 iPhone 6 模拟器上运行应用程序。但我不知道如何解决。

谢谢!

【问题讨论】:

  • 如果您使用设置为 iOS 7 的 iPhone 5 模拟器,它的定位是否不同(或更准确)?
  • 推测:您告诉它使用自动调整大小掩码而不是约束,但不提供任何自动调整大小信息。我想知道首先设置autoresizingMask 是否会有所帮助。
  • 当我在 iOS 8 和 iphone 6 模拟器中使用该代码时,它对我来说很好......

标签: ios objective-c


【解决方案1】:

使用self.textField.translatesAutoresizingMaskIntoConstraints = NO; 几乎可以告诉对象它并不真正关心框架,而是更多地依赖于您给它的约束。将其设置为 YES 会获取框架并自动对其应用约束以模仿您给它的框架。

例如,它将应用约束以使框架出现在:CGRectMake(20.0f, 35.0f, 280.0f, 30.0f)。将其设置为 NO 时,使用 NSLayoutConstraint 并以编程方式创建约束。

但在你的情况下,只需删除该行

self.textField.translatesAutoresizingMaskIntoConstraints = NO;

因为默认设置为YES

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多