swift - Swift - 如何在水平 StackView 中设置可变数量按钮之间的间距?
问题描述
我使用的水平线UIStackView
最多可以包含 3UIButton
秒。(可能只是 1、可能是 2 或 3)
我似乎无法做到这一点......我已经尝试了 and 的所有组合Distribution
,Alignment
但我无法做到正确。
这是stackView
的约束:
fileprivate func setupStackViewConstraints() {
stackView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
stackView.topAnchor.constraint(equalToConstant: 60),
stackView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
stackView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
])
}
这是按钮的约束:
fileprivate func setupFacebookButton() {
let facebookButton = UIButton()
facebookButton.setImage(UIImage(named: "facebookSocialIcon"), for: .normal)
facebookButton.imageView?.contentMode = .scaleAspectFit
facebookButton.addTarget(self, action: #selector(facebookButtonWasTapped), for: .touchUpInside)
// -----------------------------------
facebookButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
facebookButton.widthAnchor.constraint(equalToConstant: 40),
facebookButton.heightAnchor.constraint(equalToConstant: 40)
])
// -----------------------------------
stackView.addArrangedSubview(facebookButton)
}
有任何想法吗?
解决方案
尝试将您的 StackView 限制为仅使 x 和 y 居中(不限制它的前导和尾随锚点):
NSLayoutConstraint.activate([
stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor)
])
然后您可以将分布值保留为默认值并将间距值设置为您想要的值:
stackView.spacing = // 16px
这样,StackView 的宽度将等于内容宽度。
推荐阅读
- firebase - Firebase 有什么方法可以同时退出平台网络和移动应用程序?
- c++ - 在 ubuntu 上打开 pivx 钱包时出错
- load-balancing - Traefik backend.loadbalancer.swarm 与否
- react-native - 在 React Native Library 中,我如何获取 ios 当前的 UIViewController
- google-bigquery - json 的 bigquery loadJob - 在架构自动检测中强制字段为字符串
- java - Webview 未显示其元素之间的焦点变化
- php - 我想在 wordpress 中创建当前活动主题的目录
- elasticsearch - 查询时的 Elasticsearch search_analyzer
- twilio - iOS 上的 Twilio / TwiML - 使用入队和拨号
- ios - 如何确保某些代码在与 runloop 相同的后台线程上运行