【问题标题】:Auto Layout with UITextField causes exception带有 UITextField 的自动布局导致异常
【发布时间】:2013-04-08 22:44:43
【问题描述】:

我想在 UIViewController 视图中放置一个 UITextField,使用自动布局(动态调整大小和文本字段与其父视图之间的 5 pt 边距)。我使用 loadView 方法以编程方式创建视图。

UIViewController 的头部

@property (weak, nonatomic) UITextField *textField;

实施

-(void)loadView{

    //Frame
    UIView *frame = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 40)];
    [self setView:frame];
    [self.view setBackgroundColor:[UIColor redColor]];

    //TextField
    [self.textField setDelegate:self];
    [self.textField setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.textField setBackgroundColor:[UIColor blueColor]];
    [frame addSubview:self.textField];

    [frame addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(5@50)-[textField(==10@10)]-(5@50)-|"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:@{@"textField" : self.textField}]];

    [frame addConstraints:[NSLayoutConstraint constraintsWithVisualFormat: @"V:|-(5@50)-[textField(==10@10)]-(5@50)-|"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:@{@"textField" : self.textField}]];

//    //Test with UIView instead
//    UIView *sub = [[UIView alloc]init];
//    [sub setTranslatesAutoresizingMaskIntoConstraints:NO];
//    [sub setBackgroundColor:[UIColor greenColor]];
//    [frame addSubview:sub];
//    
//    [frame addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(5@50)-[sub(==10@10)]-(5@50)-|"
//                                                                  options:0
//                                                                  metrics:nil
//                                                                    views:@{@"sub" : sub}]];
//    
//    [frame addConstraints:[NSLayoutConstraint constraintsWithVisualFormat: @"V:|-(5@50)-[sub(==10@10)]-(5@50)-|"
//                                                                  options:0
//                                                                  metrics:nil
//                                                                    views:@{@"sub" : sub}]];

运行它会引发异常。奇怪的是,使用 UIView(“sub”)作为子视图(注释掉的部分)确实可以按预期工作。

输出:

文本字段不应该像这个 UIView 一样吗? textField怎么会导致异常?


新发现:只有当我在 self.textField 上使用 addConstraints 时,应用才会崩溃。如果我删除这两个调用,我可以避免崩溃,但是文本字段也不会显示。

【问题讨论】:

  • 你得到了什么异常?
  • 它在 AppDelegate 中显示 SIGABRT,行:“return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));”我在错误日志中找不到更具体的内容。
  • 你在哪里创建文本字段?您是在代码中创建它,还是您在 IB 中创建的文本字段的 IBOutlet?如果我只是分配初始化一个文本字段作为代码的第一行,它不再崩溃(约束不能正常工作,但至少它不会崩溃)。

标签: ios objective-c uiviewcontroller autolayout


【解决方案1】:

NSLayoutConstraint 只是 IOS 6 的一部分。如果您尝试使用 IOS6 以外的代码 (例如 IOS 5、IOS 4.3)您很可能会遇到此运行时错误。

【讨论】:

  • 我的部署目标是6.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 2014-10-23
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
相关资源
最近更新 更多