自动布局以编程方式导致 iphone 4 出现问题
Posted
技术标签:
【中文标题】自动布局以编程方式导致 iphone 4 出现问题【英文标题】:AutoLayout programmatically cause issue in iphone 4 【发布时间】:2015-07-18 05:57:15 【问题描述】:我正在通过代码学习自动布局。为了我的学习目的,我正在使用自动布局做示例应用程序。在我的示例应用程序中,我决定将文本字段保持在距上边距 20 点以下。这是代码
#import "SampleViewController.h"
@interface SampleViewController ()
UITextField *username;
@end
@implementation SampleViewController
- (void)viewDidLoad
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeNone;
[self prepareViews];
-(void)prepareViews
username = [[UITextField alloc]init];
username.placeholder = @"Username";
[username setBorderStyle:UITextBorderStyleRoundedRect];
username.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:username];
[self prepareConstraint];
-(void)prepareConstraint
NSLayoutConstraint *constraint = [NSLayoutConstraint
constraintWithItem:username
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
[self.view addConstraint:constraint];
constraint = [NSLayoutConstraint
constraintWithItem:username
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:250];
[self.view addConstraint:constraint];
constraint = [NSLayoutConstraint
constraintWithItem:username
attribute:NSLayoutAttributeTopMargin
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTopMargin
multiplier:1.0
constant:20];
[self.view addConstraint:constraint];
@end
当我在 iphone 4(ios 7.1) 上运行此代码时,我得到了这样的输出 然后,当我在 iphone 5S(iOS 8.4)上运行此代码时,我得到了这样的输出
伙计们,我不知道我在哪里犯了错误。请指出我在哪里犯了错误。当我在 iphone 4 (iOS 7.1) 上运行此代码时,我收到了这个警告。
无法同时满足约束。可能至少有一个 以下列表中的约束是您不想要的。尝试 这个:(1)查看每个约束并尝试找出你 不要期待; (2) 找到添加了不需要的约束的代码或 约束并修复它。 (注:如果你看到 NSAutoresizingMaskLayoutConstraints 你不明白的,参考 到 UIView 属性的文档 translatesAutoresizingMaskIntoConstraints) ( "<0x14dcac70 h:>0x14dcac70>
<0x14dcac70 h:>0x14dcac70>
【参考方案1】:
这是在 4s 和 5s 中测试的......你只需将宽度约束添加到视图而不是你应该将它应用到文本字段......
NSLayoutConstraint *constraint = [NSLayoutConstraint
constraintWithItem:username
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
[self.view addConstraint:constraint];
constraint = [NSLayoutConstraint
constraintWithItem:username
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:250];
[username addConstraint:constraint];
constraint = [NSLayoutConstraint
constraintWithItem:username
attribute:NSLayoutAttributeTopMargin
relatedBy:NSLayoutRelationEqual
toItem:self.topLayoutGuide
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:20];
[self.view addConstraint:constraint];
【讨论】:
以上是关于自动布局以编程方式导致 iphone 4 出现问题的主要内容,如果未能解决你的问题,请参考以下文章
iOS 以编程方式生成的视图具有隐藏的约束,导致与自动布局发生冲突