【发布时间】:2018-10-13 07:45:49
【问题描述】:
我想在我的应用中添加一个UIStackView 的登录按钮,所以我添加了以下代码:
override func viewDidLayoutSubviews()
{
super.viewDidLayoutSubviews()
SignInButtonsStackView.center.x = self.view.center.x
SignInButtonsStackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10)
SignInButtonsStackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 10)
SignInButtonsStackView.spacing = 5
SignInButtonsStackView.addArrangedSubview(FacebookSignInButton)
SignInButtonsStackView.addArrangedSubview(GoogleSignInButton)
}
我先设置UIStackView 的约束,然后再添加按钮。
我的目标是将来能够添加更多登录按钮,同时添加最少的代码。
这就是我得到的:
不仅宽度不一样,而且高度也乱了。
如何确保 UIStackView 中的所有项目都具有相同的宽度、高度和间距?如何修复此视图以使其看起来不错?
编辑
我在调试窗口中有这个:
"<NSLayoutConstraint:0x600000288700 UILayoutGuide:0x6000007b0760'UIViewSafeAreaLayoutGuide'.bottom == UIStackView:0x7f9b04d15420.bottom + 187 (active)>",
"<NSLayoutConstraint:0x600000288ac0 V:|-(499)-[UIStackView:0x7f9b04d15420] (active, names: '|':UIView:0x7f9b04d166e0 )>",
"<NSLayoutConstraint:0x60c000290f40 GIDSignInButton.height == 10 (active, names: GIDSignInButton:0x7f9b04d076e0 )>",
"<NSLayoutConstraint:0x60800028cd50 'UISV-canvas-connection' V:[GIDSignInButton]-(0)-| (active, names: GIDSignInButton:0x7f9b04d076e0, '|':UIStackView:0x7f9b04d15420 )>",
"<NSLayoutConstraint:0x60c00028bb80 'UISV-canvas-connection' UIStackView:0x7f9b04d15420.top == FBSDKLoginButton:0x7f9b04d0a4d0'Continue with Facebook'.top (active)>",
"<NSLayoutConstraint:0x60c00028ad20 'UISV-fill-equally' GIDSignInButton.height == FBSDKLoginButton:0x7f9b04d0a4d0'Continue with Facebook'.height (active, names: GIDSignInButton:0x7f9b04d076e0 )>",
"<NSLayoutConstraint:0x60c000288610 'UISV-spacing' V:[FBSDKLoginButton:0x7f9b04d0a4d0'Continue with Facebook']-(5)-[GIDSignInButton] (active, names: GIDSignInButton:0x7f9b04d076e0 )>",
"<NSLayoutConstraint:0x60800028d1b0 'UIView-Encapsulated-Layout-Height' UIView:0x7f9b04d166e0.height == 736 (active)>",
"<NSLayoutConstraint:0x600000288840 'UIViewSafeAreaLayoutGuide-bottom' V:[UILayoutGuide:0x6000007b0760'UIViewSafeAreaLayoutGuide']-(0)-| (active, names: '|':UIView:0x7f9b04d166e0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x60c000290f40 GIDSignInButton.height == 10 (active, names: GIDSignInButton:0x7f9b04d076e0 )>
【问题讨论】:
-
试试 SignInButtonsStackView.alignment = .fill
-
我添加了 .fill ,这对视图没有任何影响...
-
SignInButtonsStackView.center.x = self.view.center.x不是约束。您还在每个布局之后添加新的约束,一段时间后您将得到数十个重复的约束。 不要在viewDidLayoutSubviews中做这样的事情!
标签: swift constraints uistackview