【发布时间】:2019-06-14 11:49:16
【问题描述】:
我正在以编程方式创建一个带有 UIBarButtonItem 的 UIToolbar。我没有为此 ViewController 使用 .xib 或故事板。这是我如何创建它的代码。
NSMutableArray *items = [[NSMutableArray alloc] init];
UIBarButtonItem *buttonItem;
buttonItem = [[UIBarButtonItem alloc ] initWithTitle: [Language get:@"Home" alter:nil]
style: UIBarButtonItemStyleBordered
target: self
action: @selector(viewChangeTo)];
[items addObject:buttonItem];
toolbar = [[UIToolbar alloc] init];
toolbar.frame = CGRectMake(0, 0, 1024, 44);
[toolbar setItems:items animated:NO];
[self.view addSubview:toolbar];
每次加载视图时,我都会收到 LayoutConstraints 错误。
[LayoutConstraints] 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.
"<NSLayoutConstraint:0x6000023de350 H:|-(20)-[_UIModernBarButton:0x7fed8c463e00'Home'] (active, names: '|':_UIButtonBarButton:0x7fed8c463bb0 )>",
"<NSLayoutConstraint:0x6000023de3a0 H:[_UIModernBarButton:0x7fed8c463e00'Home']-(20)-| (active, names: '|':_UIButtonBarButton:0x7fed8c463bb0 )>",
"<NSLayoutConstraint:0x6000023dff70 '_UITemporaryLayoutWidth' _UIButtonBarButton:0x7fed8c463bb0.width == 0 (active)>
Will attempt to recover by breaking constraint
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2019-01-21 13:14:24.777354+0800 M[50994:10130357] [LayoutConstraints] 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.
(
"<NSLayoutConstraint:0x6000023de530 _UIModernBarButton:0x7fed8c463e00'Home'.lastBaseline == UILayoutGuide:0x6000039eef40'UIViewLayoutMarginsGuide'.bottom (active)>",
"<NSLayoutConstraint:0x6000023de580 V:|-(>=0)-[_UIModernBarButton:0x7fed8c463e00'Home'] (active, names: '|':_UIButtonBarButton:0x7fed8c463bb0 )>",
"<NSLayoutConstraint:0x6000023e5680 UIButtonLabel:0x7fed8c457e90'Home'.centerY == _UIModernBarButton:0x7fed8c463e00'Home'.centerY + 1.5 (active)>",
"<NSLayoutConstraint:0x6000023e4c80 '_UITemporaryLayoutHeight' _UIButtonBarButton:0x7fed8c463bb0.height == 0 (active)>",
"<NSLayoutConstraint:0x6000023de490 'UIView-bottomMargin-guide-constraint' V:[UILayoutGuide:0x6000039eef40'UIViewLayoutMarginsGuide']-(16)-| (active, names: '|':_UIButtonBarButton:0x7fed8c463bb0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x6000023e5680 UIButtonLabel:0x7fed8c457e90'Home'.centerY == _UIModernBarButton:0x7fed8c463e00'Home'.centerY + 1.5 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
【问题讨论】:
-
见stackoverflow.com/questions/47463820/…。我个人认为这是一个 iOS 错误。
-
我在使用
UIToolbar()创建工具栏时遇到了完全相同的约束错误,如上所述,这是一个 iOS 错误。 @strohtennis 建议的解决方法是将 init 与 CGRect 参数一起使用。
标签: ios objective-c uibarbuttonitem nslayoutconstraint uitoolbar