如何在视图宽度发生变化时使UILabel正确调整其尺寸?

时间:2017-10-12 01:19:15

标签: ios uitableview uikit uilabel

我有一个UILabel配置为根据文本长度自动调整多行的大小。标签位于动态调整大小的UITableViewCell中,并且对所有大小都有约束。

代码将UILabel原点向右移动,从而缩小UILabel宽度。

标签正确调整大小并包装文本。在将原点定位回其原始位置的过程中,UILabel的高度扩展3行。但是只需要2行文本。

高度扩展为3行的原因是在使用视图动画将原点返回到原始点的过程中,文本扩展为3行并缩减为2行。

是否有调用或设置才能使单元格正确调整大小?或者2有一种方法可以防止细胞在原点发生变化时调整大小。特别是。当宽度缩小和扩展时,是否可以暂时禁用UILabel多线选项?

以下是显示行为的屏幕截图。

图(1)更改其原点之前标签在UITableViewCell中的位置。

Before label origin Move

图(2)UILabel的原点向右移动并减小标签的宽度。请注意,第二行有2行,标签边框紧紧地拥抱文本。

Moved label origin right

图(3)Origin返回第一张图像的位置。请注意,第二行的UIlabel松散地拥抱文本,并且不会返回到原始高度。

Return origin to the first position

    @IBAction func editTable(_ sender: UIBarButtonItem) {

    if isEditingDynamic  {
        let animate = UIViewPropertyAnimator(duration: 0.4, curve: .easeIn) {
            for cell in self.tableView.visibleCells as! [CellResize] {
                cell.lblDescription.frame.origin.x = 16
            }
            self.tableView.beginUpdates()
            self.tableView.endUpdates()
        }
        animate.addCompletion(){
            (position:UIViewAnimatingPosition) in
            for cell in self.tableView.visibleCells as! [CellResize] {
                cell.leadingContraint.constant = 0
            }
            self.tableView.beginUpdates()
            self.tableView.endUpdates()
        }
        animate.startAnimation()
        isEditingDynamic = false
    } else {
        let animate = UIViewPropertyAnimator(duration: 0.4, curve: .easeIn) {
            for cell in self.tableView.visibleCells as! [CellResize] {
                cell.lblDescription.frame.origin.x = 60
            }
            self.tableView.beginUpdates()
            self.tableView.endUpdates()
        }
        animate.addCompletion(){
            (position:UIViewAnimatingPosition) in
            for cell in self.tableView.visibleCells as! [CellResize] {
                cell.leadingContraint.constant = 54
            }
            self.tableView.beginUpdates()
            self.tableView.endUpdates()
        }
        animate.startAnimation()
        isEditingDynamic = true
    }
}

1 个答案:

答案 0 :(得分:0)

您是否可以发布一些表格查看单元格和控制器的设置代码?通常,我要做的是创建单行UILabel并将其放在单元格的内容视图中,将其约束为TopLeftTrailing& Leading height constraint >= current&{ numberOfLines = 0

然后,在tableview cell中,我会设置其estimatedHeight to be 100heightForRow to be UITableViewAutomaticDimension

在这种情况下,TableView将根据标签的内容自动处理单元格的高度。