val*_*u17 9 objective-c ios autolayout nslayoutconstraint
我在这个设备上运行应用程序时为iPhone 4设置了一些细节限制.在对齐和一切方面,一切看起来都很棒.
但是,我正在试图通过打破约束来试图恢复它们.
当它检测到它是iPhone 4时,此方法在我的viewDidLoad中调用
- (void) addConstraints {
// removing automatic system constraints
[self.view removeConstraints:self.view.constraints];
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
NSDictionary *views = NSDictionaryOfVariableBindings(appBackground, myCustomer, myItemDetails, myItemQuantity, myItemPrice, myNext, myBtn); // UIImageView, UITextField, UIButton
for (UIView *view in [views allValues]) {
view.translatesAutoresizingMaskIntoConstraints = NO;
}
NSDictionary *metrics = @{@"width": @210.0, @"height": @42.0, @"verticalSpacing": @34};
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[appBackground]|"
options:0
metrics:nil
views:views];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[appBackground]|"
options:0
metrics:nil
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(85)-[myCustomer(==height)]-(verticalSpacing)-[myItemDetails(==height)]-(verticalSpacing)-[myItemQuantity(==height)]-(verticalSpacing)-[myItemPrice(==height)]-(18)-[myNext(==35)]-(71.5)-[myBtn(==50)]-(7.5)-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[myCustomer(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[myItemDetails(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[myItemQuantity(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[myItemPrice(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-78-[myNext(==173)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-11.5-[myBtn(==54)]-|"
options:0
metrics:metrics
views:views]];
[self.view addConstraints:constraints];
}
Run Code Online (Sandbox Code Playgroud)
错误!
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)
(
"<NSLayoutConstraint:0xb8282f0 H:|-(50)-[UITextField:0xb823fc0] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb828320 H:[UITextField:0xb823fc0(210)]>",
"<NSLayoutConstraint:0xb82be10 H:[UITextField:0xb823fc0]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82d3d0 H:|-(78)-[UIButton:0xb82ad50] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82d420 H:[UIButton:0xb82ad50(173)]>",
"<NSLayoutConstraint:0xb82d450 H:[UIButton:0xb82ad50]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xb82d450 H:[UIButton:0xb82ad50]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2014-08-03 14:03:29.239 iReceipt[2886:607] 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)
(
"<NSLayoutConstraint:0xb8282f0 H:|-(50)-[UITextField:0xb823fc0] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb828320 H:[UITextField:0xb823fc0(210)]>",
"<NSLayoutConstraint:0xb82be10 H:[UITextField:0xb823fc0]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82d480 H:|-(11.5)-[UIButton:0xb820120] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82e390 H:[UIButton:0xb820120(54)]>",
"<NSLayoutConstraint:0xb82e3c0 H:[UIButton:0xb820120]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xb82e3c0 H:[UIButton:0xb820120]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>
Run Code Online (Sandbox Code Playgroud)
如果您需要更多信息,请告诉我.
Ken*_*ses 18
这三个限制:
"<NSLayoutConstraint:0xb8282f0 H:|-(50)-[UITextField:0xb823fc0] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb828320 H:[UITextField:0xb823fc0(210)]>",
"<NSLayoutConstraint:0xb82be10 H:[UITextField:0xb823fc0]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>",
Run Code Online (Sandbox Code Playgroud)
要求超级视图为50 + 210 + 20 == 280点宽.
这三个限制:
"<NSLayoutConstraint:0xb82d3d0 H:|-(78)-[UIButton:0xb82ad50] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82d420 H:[UIButton:0xb82ad50(173)]>",
"<NSLayoutConstraint:0xb82d450 H:[UIButton:0xb82ad50]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>"
Run Code Online (Sandbox Code Playgroud)
要求相同的超级视图为78 + 173 + 20 == 271点宽.
显然,那些不可能同时是真实的.你需要决定你真正想要在这里发生什么.我们无法读懂你的想法,UIKit也无法读懂.
通常,您不要在按钮上设置宽度约束; 你让它使用它的内在大小和适当的内容拥抱和抗压性优先级.此外,您可能不希望在按钮的任一侧设置硬间距.让这个间距在没有约束的情况下变化,因此按钮可以是其内在大小,降低该约束的优先级,因此它是可选的,或者产生不等式,因此您具有最小间距但不是精确间距.
| 归档时间: |
|
| 查看次数: |
21403 次 |
| 最近记录: |