我正在使用 Objective-C 和 XCode 7 练习可视化格式布局,但很难让一个非常简单的布局工作。 我的应用程序只是一个简单的单 View 应用程序,我正在尝试将 UILabel 添加到主视图。 下面是代码。
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UILabel *label = [[UILabel alloc] init];
label.text = @"Hello world";
label.layer.borderWidth = 1.0f;
label.layer.borderColor = [UIColor redColor].CGColor;
[self.view addSubview:label];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(label);
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat"|[label]|"
options:0
metrics:nil views:viewsDictionary]];
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat"V:|[label]|"
options:0
metrics:nil views:viewsDictionary]];
NSLog(@"constraints: %@", self.view.constraints);
}
运行这个我得到一堆错误:
2016-02-01 18:14:15.729 AutolayoutVisualFormat[26671:909266] constraints: (
"<_UILayoutSupportConstraint:0x79771ab0 V:[_UILayoutGuide:0x7976f950(0)]>",
"<_UILayoutSupportConstraint:0x79786d30 V:|-(0)-[_UILayoutGuide:0x7976f950] (Names: '|':UIView:0x79771790 )>",
"<_UILayoutSupportConstraint:0x797884e0 V:[_UILayoutGuide:0x79772e30(0)]>",
"<_UILayoutSupportConstraint:0x79777540 _UILayoutGuide:0x79772e30.bottom == UIView:0x79771790.bottom>",
"<NSLayoutConstraint:0x7978d930 H:|-(0)-[UILabel:0x7976d000'Hello world'] (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7978da50 H:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7978fcb0 V:|-(0)-[UILabel:0x7976d000'Hello world'] (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7978fce0 V:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>"
)
2016-02-01 18:14:15.733 AutolayoutVisualFormat[26671:909266] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x7a0630a0 h=--& v=--& H:[UILabel:0x7976d000'Hello world'(0)]>",
"<NSLayoutConstraint:0x7978d930 H:|-(0)-[UILabel:0x7976d000'Hello world'] (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7978da50 H:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7a080130 'UIView-Encapsulated-Layout-Width' H:[UIView:0x79771790(320)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7978da50 H:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2016-02-01 18:14:15.733 AutolayoutVisualFormat[26671:909266] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x7a0758b0 h=--& v=--& V:[UILabel:0x7976d000'Hello world'(0)]>",
"<NSLayoutConstraint:0x7978fcb0 V:|-(0)-[UILabel:0x7976d000'Hello world'] (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7978fce0 V:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7a081610 'UIView-Encapsulated-Layout-Height' V:[UIView:0x79771790(568)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7978fce0 V:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
[label setTranslatesAutoresizingMaskIntoConstraints:NO];
translatesAutoresizingMaskIntoConstraints
。该属性(property)是
默认为 YES,这意味着将创建 Auto Layout 约束
基于 View 的自动调整大小掩码。我们希望尊重的观点
我们将添加的自动布局约束,所以这个属性应该是
设置为 NO。
- When this property is YES, which it is by default, the autoresizing mask of a view is translated into constraints. For example, if a view is configured as in Figure 6-1 and
translatesAutoresizingMaskIntoConstraints is YES, then the
constraints |-20-[button]-20-| and V:|-20-[button(20)] are added to
the view’s superview. The net effect is that unaware views behave as
they did in versions of OS X prior to 10.7. For views that are aware of Auto Layout, in most circumstances you will want translatesAutoresizingMaskIntoConstraints to be NO. This is because the constraints generated by translating the autoresizing mask are already sufficient to completely specify the frame of a view given its superview’s frame, which is generally too much. For example, this will prevent a button from automatically assuming its optimal width when its title is changed.
关于IOS 简单的 Visual Format 布局不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35129248/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |