如何正确地将安全区域插图添加到 UIStackView?

Posted

技术标签:

【中文标题】如何正确地将安全区域插图添加到 UIStackView?【英文标题】:How to correctly add safe area inset to UIStackView? 【发布时间】:2022-01-20 20:52:05 【问题描述】:

所以我有一个简单的堆栈视图,里面有两个文本,并且我添加了安全区域约束,

class ViewController: UIViewController 
  override func viewDidLoad() 
    super.viewDidLoad()
    view.backgroundColor = .white
    
    let label = UILabel()
    label.text = "Hello, World!"
    label.sizeToFit()
    label.translatesAutoresizingMaskIntoConstraints = false
    
    let label2 = UILabel()
    label2.text = "Hello, World!"
    label2.sizeToFit()
    label2.translatesAutoresizingMaskIntoConstraints = false
    
    let stackView = UIStackView()
    stackView.axis = .vertical
    stackView.addArrangedSubview(label)
    stackView.addArrangedSubview(label2)
    stackView.translatesAutoresizingMaskIntoConstraints = false
    
    view.addSubview(stackView)
    
    NSLayoutConstraint.activate([
      stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
      stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
    ])
  

但它在两个文本之间有很大的空间。如何删除该空间?仅当我添加此行 stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) 时才会发生这种情况。

【问题讨论】:

尝试给出底部约束 >= stackView.bottomAnchor.constraint(greaterThanOrEqualTo: view.safeAreaLayoutGuide.bottomAnchor) @RajaKishan 不幸的是,这没用。 堆栈视图有什么用?只需直接定位您的标签。 @matt 我正在使用堆栈视图来定位。直接定位很痛苦,因为据我所知,我必须为每个标签添加约束。 【参考方案1】:

问题在于 StackView 正在制作它,因此其中的元素平等地填充了空间。 尝试设置:stackView.distribution = .fill 这是一篇关于 StackView 如何工作以及为什么会发生这种情况的文章:https://spin.atomicobject.com/2016/06/22/uistackview-distribution/

【讨论】:

这不会产生影响,因为它只会将标签移向底部。第一个标签将位于屏幕中间,第二个标签位于底部

以上是关于如何正确地将安全区域插图添加到 UIStackView?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将多个片段添加到片段过渡?

如何正确地将 UITextField 添加到 UITableViewCell

如何正确地将 Kal 框架添加到我的 iPhone 项目中?

如何正确地将类型提示添加到 Mixin 类?

如何正确地将事件侦听器添加到 React useEffect 挂钩?

如何正确地将资源 (*.res) 文件添加到带有组件的包中?