当屏幕在tableviewcell中旋转时,按钮位置会发生变化

时间:2015-05-21 06:34:23

标签: ios swift autolayout nslayoutconstraint

我必须在UIButton的右侧管理我的UITableViewCell位置,如下图所示。

enter image description here

在这个单元格中,除了按钮之外,我从storyboard中提供了所有约束。因为我在运行时创建了按钮,如下所示

tableview:cellForRowAtIndexPath方法

let mybutton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
var width:CGFloat = UIScreen.mainScreen().bounds.width
mybutton.frame = CGRectMake(width - 108, 8, 100, 31)
mybutton.tag = indexPath.row
cell?.contentView.addSubview(mybutton)  

所以问题是当我们以纵向启动应用程序时它没问题但是当我们旋转它时,按钮显示在纵向位置...例如如果按钮在纵向220处的位置然后在横向上它显示在220并且在滚动之后它看起来没问题,因为细胞可重用性......

要解决这个问题,我会尝试手动为按钮添加一些约束。我不太了解如何以编程方式添加约束,但我会在顶部位置添加一个约束以下的约束。与尾随类似

cell?.contentView.addConstraint(  
      NSLayoutConstraint(item:imageview ,  
                          attribute: NSLayoutAttribute.Top,  
                          relatedBy: NSLayoutRelation.Equal,  
                          toItem:mybutton ,  
                          attribute:NSLayoutAttribute.Top,  
                          multiplier: 1, constant: 8))  

但它显示了破坏限制......

所以我的问题是......

  1. 如何处理故事板+手动约束

  2. 如何在按钮的右侧放置按钮

2 个答案:

答案 0 :(得分:0)

我通常使用自动布局视觉格式

   //Horizontal constraints
let horizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[button]", options: nil, metrics: metrics, views: views)
self.view.addConstraints(horizontalConstraints)

//Vertical constraints
let verticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("V:|-20-[button]", options: nil, metrics: metrics, views: views)
self.view.addConstraints(verticalConstraints)

基本上你通过UI项目“|”设置垂直和水平休闲的V或H对于屏幕的板,而不是以像素为单位的值 - 最后是下一个[UIComponent]

你可以找到一个很好的教程here

答案 1 :(得分:0)

我的评论声誉不足以及我回答问题的原因

您可以在方向更改后重新加载数据。

它将解决问题

override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) {
    tableVIew.reloadData()
}