[英]UIView's height constraints break child view's height constraint
I have a really simple setup that I can't get to do what I want. 我有一个非常简单的设置,我无法做我想做的事情。
I'm trying to add an inputAccessoryView
. 我正在尝试添加一个inputAccessoryView
。
For the inputAccessoryView
I have a UIView
( ViewA ) with a subview ( ViewB ). 对于inputAccessoryView
我有一个UIView
(ViewA)与子视图(ViewB)。 ViewB is fixed to all edges of ViewA . ViewB固定在ViewA的所有边缘。 ViewB has a fixed height, which needs to be the height of both ViewA and ViewB . ViewB具有固定的高度,该高度必须同时是ViewA和ViewB的高度。
ViewA 's isn't set by me, but is 0
which breaks the height of ViewB (set to 42). ViewA的不是我设置的,而是0
,这会破坏ViewB的高度(设置为42)。
ViewA is added as a subview on a UIViewController
's view and fixed to the bottom and both the leading and trailing edges (so width of ViewA and ViewB should be that of the UIViewController's view, which it is). ViewA作为子视图添加到UIViewController
的视图上,并固定在底部以及前端和后端(因此ViewA和ViewB的宽度应该是UIViewController的视图的宽度)。
Here's the code I have: 这是我的代码:
override init(frame: CGRect) {
super.init(frame: frame)
let viewB = UIView()
addSubview(viewB)
viewB.translatesAutoresizingMaskIntoConstraints = false
viewB.topAnchor.constraint(equalTo: topAnchor).isActive = true
viewB.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
viewB.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
viewB.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
viewB.heightAnchor.constraint(equalToConstant: 42).isActive = true
}
Which results in the following error: 导致以下错误:
2017-12-02 15:44:59.150228-0800 Ping[37511:5808904] [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.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x608000283b60 h=--& v=--& MyApp.ViewA:0x7fe606511360.height == 0 (active)>",
"<NSLayoutConstraint:0x608000282030 UIView:0x7fe606511550.height == 42 (active)>",
"<NSLayoutConstraint:0x608000281d60 V:|-(0)-[UIView:0x7fe606511550] (active, names: '|':MyApp.ViewA:0x7fe606511360 )>",
"<NSLayoutConstraint:0x608000281ef0 UIView:0x7fe606511550.bottom == MyApp.ViewA:0x7fe606511360.bottom (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x608000282030 UIView:0x7fe606511550.height == 42 (active)>
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.
ViewA has a pretty simple setup: ViewA的设置非常简单:
extension MessageViewController {
open override var canBecomeFirstResponder: Bool {
return true
}
open override var inputAccessoryView: UIView? {
return messageInputView
}
}
Why does ViewA height that I never set break the constraint that I setup? 为什么我从未设置的ViewA高度打破了我设置的约束?
I think the solution is to disable the Autoresizing Mask for ViewA : 我认为解决方案是为ViewA禁用Autoresizing Mask:
viewA.translatesAutoresizingMaskIntoConstraints = false
Since you are laying it out with the constraints. 由于您要在约束条件下进行布局。 Now it tries to set your ViewA's height to 0 which causes the problem. 现在,它尝试将ViewA的高度设置为0,这会导致问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.