如何将3个UIButtons对齐到UITableCellView的中心?

时间:2015-10-08 13:01:21

标签: ios swift uitableview uibutton autolayout

如何将3 UIButton s与UITableCellView的中心对齐?

例如说我有3个UIButton个标题:

  1. 电子邮件
  2. 电话
  3. 的Skype
  4. 可以隐藏一个或多个UIButton。例如,如果隐藏了电话UIButton,那么只有电子邮件和Skype应该在中心对齐。如果隐藏了电话和Skype,那么只有电子邮件应该在中心对齐。

    当隐藏任何UIButton时,可见的那些应该在中心对齐。

    我想让它们水平和垂直居中。

2 个答案:

答案 0 :(得分:21)

测试xcode 7:

我想你正在寻找类似的东西

enter image description here

<强>解决方案:

enter image description here

<强>步骤: 1)需要的是一个封装视图,它将所有三个按钮(Skype,电话,电子邮件)保存到中心,而不管是否有一个按钮,其中有两个或三个按钮。为此,创建了一个持有人视图,在下面的快照中以绿色背景显示。enter image description here

该持有人视图的约束是

enter image description here

只是保存所有子视图,它将从其内容中获取其大小,因此无需给出高度/宽度约束。

2)现在,中心按钮的约束将是

enter image description here

3)两侧按钮的约束将是

enter image description here

如果您需要隐藏任何按钮,只需将其宽度约束设为0,所有其他按钮将相应重新排列

对于TableView单元格:

    @IBOutlet weak var emailButtonWidthConstraint : NSLayoutConstraint?
    @IBOutlet weak var phoneButtonWidthConstraint : NSLayoutConstraint?
    @IBOutlet weak var skypeButtonWidthConstraint : NSLayoutConstraint?

    func showButtons(showSkype showSkype : Bool, showEmail : Bool, showPhone : Bool ){
        emailButtonWidthConstraint?.constant = showEmail ? 54.0 : 0.0
        phoneButtonWidthConstraint?.constant = showPhone ? 54.0 : 0.0
        skypeButtonWidthConstraint?.constant = showSkype ? 54.0 : 0.0

        self.layoutIfNeeded()
    }

使用:

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as? CustomCell

        if indexPath.row == 0 {
            cell?.showButtons(showSkype: true, showEmail: true, showPhone: true)
        } else if indexPath.row == 1 {
            cell?.showButtons(showSkype: false, showEmail: true, showPhone: true)
        } else if indexPath.row == 2 {
            cell?.showButtons(showSkype: true, showEmail: false, showPhone: true)
        } else if indexPath.row == 3 {
            cell?.showButtons(showSkype: true, showEmail: true, showPhone: false)
        } else if indexPath.row == 4 {
            cell?.showButtons(showSkype: false, showEmail: false, showPhone: true)
        } else if indexPath.row == 5 {
            cell?.showButtons(showSkype: false, showEmail: true, showPhone: false)
        } else if indexPath.row == 6 {
            cell?.showButtons(showSkype: true, showEmail: false, showPhone: false)
        } else {
            cell?.showButtons(showSkype: true, showEmail: true, showPhone: true)
        }

        return cell!
    }

使用UIStackView可以实现同样的效果(显然没有那么令人头痛)但是在9.0之前的iOS上无法运行

更新(2015年10月26日):

GitHub Repo用于测试项目

答案 1 :(得分:0)

您应该查看UIStackView(但是,它适用于iOS 9)。

我相信UIStackViews有一种方法,其中嵌入式UIViews&#34;消失&#34;并且它将重新对齐嵌入在同一UIStackView中的其他UIView。