UIStackView 没有出现在容器视图中

Posted

技术标签:

【中文标题】UIStackView 没有出现在容器视图中【英文标题】:UIStackView not appearing in Container View 【发布时间】:2016-07-18 18:31:24 【问题描述】:

有人可以向我解释为什么我看不到这个 StackView 出现在它的容器中吗?

这就是现在的样子:

这就是我想要的样子,忽略单元格,我只需要弄清楚为什么没有显示编辑按钮、搜索栏和排序按钮。

这是我用来设置视图及其内容的代码:

    // Container
    let barViewFrame = CGRectMake(0, 0, view.frame.width, 44)
    let barViewContainer = UIView(frame: barViewFrame)
    barViewContainer.backgroundColor = UIColor(red: 231/255, green: 231/255, blue: 231/255, alpha: 1.0)
    tableView.tableHeaderView = barViewContainer

    // Edit Button
    let editButton = UIButton(type: .System)
    editButton.bounds = CGRectMake(0, 0, 44, 44)
    editButton.setTitle("Edit", forState: .Normal)

    // Search Bar
    let searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: 50, height: 44))
    searchBar.placeholder = "Search"
    searchBar.searchBarStyle = .Prominent
    searchBar.barTintColor = UIColor(red: 231/255, green: 231/255, blue: 231/255, alpha: 1.0)

    // Sort Button
    let sortButtton = UIButton(type: .Custom)
    sortButtton.bounds = CGRectMake(0, 0, 44, 44)
    sortButtton.setImage(UIImage(named: "Sort"), forState: .Normal)

    // Stackview
    let stackViewH = UIStackView(arrangedSubviews: [editButton, searchBar, sortButtton])
    stackViewH.axis = .Horizontal
    stackViewH.alignment = .Center
    stackViewH.spacing = 8

    barViewContainer.addSubview(stackViewH)

    barViewContainer.addConstraints([
        stackViewH.leftAnchor.constraintEqualToAnchor(barViewContainer.leftAnchor),
        stackViewH.topAnchor.constraintEqualToAnchor(barViewContainer.topAnchor),
        stackViewH.rightAnchor.constraintEqualToAnchor(barViewContainer.rightAnchor),
        stackViewH.bottomAnchor.constraintEqualToAnchor(barViewContainer.bottomAnchor)])

【问题讨论】:

尝试添加stackViewH.translatesAutoresizingMaskIntoConstraints = false 完美的工作。谢谢!即使在阅读了文档中的“translatesAutoresizingMaskIntoConstraints”描述后,我仍然不知道它的作用。 【参考方案1】:

当您以编程方式添加视图时,ios 假定您希望使用框架来布局这些视图。为了使这项工作与自动布局一起工作,它在幕后添加了约束,因此视图将根据其框架显示。但是,您正在添加您希望自动布局引擎使用的约束,而不是它想要创建的约束。因此,要告诉自动布局不要生成这些约束,您可以将 translatesAutoresizingMaskIntoConstraints 设置为 false 以用于您不希望发生这种情况的视图。

在你的情况下:

stackViewH.translatesAutoresizingMaskIntoConstraints = false

【讨论】:

感谢您为我解决这个问题。我明白我做错了什么。

以上是关于UIStackView 没有出现在容器视图中的主要内容,如果未能解决你的问题,请参考以下文章

基于子视图的 UIStackView 容器视图高度

UIStackView 和另一个 UIStackView 问题中的占位符视图

使用乘数在 UIStackView 内按比例设置视图 - 快速 - 以编程方式

以编程方式使用堆栈视图

以编程方式在 UIStackView 中添加视图

强制视图在 UIStackView 中占用尽可能多的空间