【问题标题】:Adding Right Aligning Constraints to the Programmatically Added Subview将右对齐约束添加到以编程方式添加的子视图
【发布时间】:2017-07-30 15:33:21
【问题描述】:

我正在尝试向 `UITableViewCell 添加一个右对齐的分段控件,如下所示:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "mycell")
    // ...
    addSegmentedControlToCell(cell)
    // ...

然后

func addSegmentedControlToCell(_ cell:UITableViewCell){
    let items = ["One","Two"]
    let unitControl = UISegmentedControl(items: items)
    unitControl.selectedSegmentIndex = 0
    let maxWd = cell.frame.size.width
    let maxHt = cell.frame.size.height
    let padding:CGFloat = 5
    unitControl.frame = CGRect(x:maxWd/2, y:padding, width:maxWd/2, height: maxHt-padding*2)
    unitControl.addTarget(self, action: #selector(SettingsTableViewController.unitControlValueDidChange(_:)), for: .valueChanged)
    cell.addSubview(unitControl)
}

这在我的默认设备 iPhone 6 上运行良好。但是当我在较小宽度的设备(如 iPhone 5)上运行此应用程序时,以编程方式添加了段控件,它接收 50% 的单元格宽度(cell.frame.size.width /2) 似乎比宽度的 50% 大得多,并在单元格视口下方向右延伸。

这是因为我看到的自动布局和约束,因为 iPhone 5 单元格视图被调整大小。因此,我正在尝试向我的新分段控件添加一个约束,该约束因应用程序崩溃而失败。请注意,我还不太擅长以编程方式添加约束。

    let widthContr = NSLayoutConstraint(item: unitControl,
                                        attribute: NSLayoutAttribute.width,
                                        relatedBy: NSLayoutRelation.equal,
                                        toItem: cell,
                                        attribute: NSLayoutAttribute.notAnAttribute,
                                        multiplier: 1,
                                        constant: 0.5)
    cell.addConstraints([widthContr])

如何正确对齐子视图(Segment Control)以获得正确的单元格大小?

【问题讨论】:

    标签: ios iphone swift uitableview swift3


    【解决方案1】:

    你可以像这样设置约束:

    yourView.rightAnchor.constraint(equalTo: yourCell.rightAnchor, constant: -10).isActive = true
    

    或者:

    yourView.heightAnchor.constraint(equalToConstant: 50).isActive = true
    

    但请确保包含以下代码:

    yourSegmentedControl.translatesAutoresizingMaskIntoConstraints = false
    

    【讨论】:

      【解决方案2】:

      您可以通过 3 种方式做到这一点。 1)您在 NSLayoutConstraint 中写了 0.5 个常量(这是一个错误)。 你需要写常数是1,乘数应该是0.5。 2) 或者您应该在自定义单元的 layoutSubviews() 方法中更新 UISegmentControl 的框架。 3) 或者你应该在 UISegmentControl 添加到 Cell 之后编写 cell.layoutSubviews()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        • 1970-01-01
        • 2019-01-18
        • 1970-01-01
        相关资源
        最近更新 更多