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 问题中的占位符视图