我在界面生成器中创建了UITableView。里面是动态细胞。我说这样的限制(此方法被调用tableView:cellForRowAtIndexPath
):启动应用程序和应用程序运行时UITableView中的自动布局结果会有所不同
@IBOutlet weak var rowView: UIView!
@IBOutlet weak var flagImageView: UIImageView!
@IBOutlet weak var computedRateLabel: UILabel!
@IBOutlet weak var historyButton: UIButton!
func buildConstraintsFor() {
let viewsDictionary = ["rowView": rowView, "flagImageView": flagImageView, "view1": computedRateLabel, "historyButton": historyButton]
rowView.layer.borderWidth = 1
flagImageView.layer.borderWidth = 1
computedRateLabel.layer.borderWidth = 1
historyButton.layer.borderWidth = 1
rowView.layer.borderColor = UIColor.blackColor().CGColor
flagImageView.layer.borderColor = UIColor.purpleColor().CGColor
computedRateLabel.layer.borderColor = UIColor.orangeColor().CGColor
historyButton.layer.borderColor = UIColor.greenColor().CGColor
// remove constraints
rowView.removeConstraints(rowView.constraints())
historyButton.removeConstraints(historyButton.constraints())
// add constraints
rowView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[flagImageView]-[view1]-[historyButton]-|", options: nil, metrics: nil, views: viewsDictionary))
rowView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-1-[flagImageView]-1-|", options: nil, metrics: nil, views: viewsDictionary))
rowView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-1-[view1]-1-|", options: nil, metrics: nil, views: viewsDictionary))
rowView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-1-[historyButton]-1-|", options: nil, metrics: nil, views: viewsDictionary))
// size
historyButton.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[historyButton(==25)]", options: nil, metrics: nil, views: viewsDictionary))
rowView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[rowView(<=68)]", options: nil, metrics: nil, views: viewsDictionary))
rowView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[rowView(>=67)]", options: nil, metrics: nil, views: viewsDictionary))
flagImageView.addConstraint(NSLayoutConstraint(item: flagImageView, attribute: .Width, relatedBy: .Equal, toItem: flagImageView, attribute: .Height, multiplier: 1, constant: 0))
}
当我运行应用程序,我得到下面这正是我想要
当我滚动的TableView和时行消失,重新出现(或当我去到另一个的viewController和回来)我得到以下几点:
我不明白为什么。 如果我补充一点:
let width = UIScreen.mainScreen().applicationFrame.size.width
rowView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[rowView(==\(width))]", options: nil, metrics: nil, views: viewsDictionary))
这似乎是解决这个问题,但是当我去的风景不工作了。
当我做了布局时,我做错了吗?
编辑:
当我在这里加入他们后打印的rowView的所有约束的描述是我所得到的:
<NSLayoutConstraint:0x17009f3b0 UIImageView:0x1701f5a00.leading == UITableViewCellContentView:0x1701968c0.leadingMargin>
<NSLayoutConstraint:0x17009f6d0 H:[UIImageView:0x1701f5a00]-(NSSpace(8))-[UILabel:0x13760f7f0'12 106,98']>
<NSLayoutConstraint:0x17009f9a0 H:[UILabel:0x13760f7f0'12 106,98']-(NSSpace(8))-[UIButton:0x137634b60]>
<NSLayoutConstraint:0x17009dec0 UITableViewCellContentView:0x1701968c0.trailingMargin == UIButton:0x137634b60.trailing>
<NSLayoutConstraint:0x170098920 V:|-(1)-[UIImageView:0x1701f5a00] (Names: '|':UITableViewCellContentView:0x1701968c0)>
<NSLayoutConstraint:0x17009a4a0 V:[UIImageView:0x1701f5a00]-(1)-| (Names: '|':UITableViewCellContentView:0x1701968c0)>
<NSLayoutConstraint:0x174098dd0 V:|-(1)-[UILabel:0x13760f7f0'12 106,98'] (Names: '|':UITableViewCellContentView:0x1701968c0)>
<NSLayoutConstraint:0x174099550 V:[UILabel:0x13760f7f0'12 106,98']-(1)-| (Names: '|':UITableViewCellContentView:0x1701968c0)>
<NSLayoutConstraint:0x170283c00 V:|-(1)-[UIButton:0x137634b60] (Names: '|':UITableViewCellContentView:0x1701968c0)>
<NSLayoutConstraint:0x1702837a0 V:[UIButton:0x137634b60]-(1)-| (Names: '|':UITableViewCellContentView:0x1701968c0)>
<NSLayoutConstraint:0x170283d90 V:[UITableViewCellContentView:0x1701968c0(<=68)]>
<NSLayoutConstraint:0x170283de0 V:[UITableViewCellContentView:0x1701968c0(>=67)]>
检查这种方法:[http://stackoverflow.com/questions/29231390/uitableview-strange-layout-behavior-changes-on-scroll/29327082#29327082 ] [1] [1]:http://stackoverflow.com/questions/29231390/uitableview-strange-layout-behavior-changes-on-scroll/29327082#29327082 – Ram 2015-04-01 10:41:37
并不能真正帮助作为对于我来说,我设置了所有的约束条件(我没有看到哪一个缺失),并且答案中提供的链接没有以编程方式讨论约束条件,但是在IB中 – Nico 2015-04-01 11:01:23
尝试将autosizingMask添加到rowView rowView.autoresizingMask = UIViewAut oresizing。FlexibleWidth – Ram 2015-04-01 11:13:49