【问题标题】:button position change when screen rotate in tableviewcell屏幕在tableviewcell中旋转时按钮位置发生变化
【发布时间】:2015-05-21 06:34:23
【问题描述】:

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

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

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. 如何在单元格右侧定位按钮

【问题讨论】:

  • 请尝试通过情节提要解决此问题。用代码来维护约束是很痛苦的。请阅读统一故事板developer.xamarin.com/guides/ios/platform_features/… 以在设备处于不同方向时进行自定义约束。
  • 我也想这样做...但问题是保持按钮的状态...由于单元格可重用性,我必须以编程方式添加按钮..所以现在我必须添加以编程方式限制按钮...
  • 为了单元格可重用性,您可以将按钮放在 xib 中的单元格内,也可以在 xibs 上使用约束,这样更简洁。
  • @Bhavin 对于单元可重用性,您可以根据条件显示/隐藏此按钮,而不是每次都以编程方式添加。然后您可以在 StoryBoard 中管理约束。
  • @objectiveCarlo 是的,但是现在……我会做除了这个之外的所有事情……所以我想用这种风格解决它……

标签: ios swift autolayout nslayoutconstraint


【解决方案1】:

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

   //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

【讨论】:

    【解决方案2】:

    我没有足够的评论声誉,这就是我回答这个问题的原因

    你可以在方向改变后重新加载数据。

    解决问题

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

    【讨论】:

    • 让我们说它有效...我知道它应该有效,但它不是正确的方式...因为 tableview 重新加载按钮会产生闪烁效果...以及它对用户的可怕体验...
    • 我是新手,这是我知道的唯一方法。欢迎任何其他建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 2021-02-26
    • 1970-01-01
    相关资源
    最近更新 更多