Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UILabel使用minimumScaleFactor缩放字体后不调整大小_Ios_Swift_Autolayout_Uikit_Snapkit - Fatal编程技术网

Ios UILabel使用minimumScaleFactor缩放字体后不调整大小

Ios UILabel使用minimumScaleFactor缩放字体后不调整大小,ios,swift,autolayout,uikit,snapkit,Ios,Swift,Autolayout,Uikit,Snapkit,我在UITableViewCell中有一个UILabel,我想根据内容动态调整它的字体和大小,以始终保持它可以支持的最大字体,而不截断。大多数情况下,我都是使用adjustsFontSizeToFitWidth,但是标签有额外的垂直空间,它不需要 在iPhone SE模拟器上运行的这个屏幕截图中,标签正确地将字体从55缩小到合适的大小,但是标签顶部有额外的空间。我想让那个空间消失 这是我的标签代码: private lazy var label: UILabel = { let

我在
UITableViewCell
中有一个
UILabel
,我想根据内容动态调整它的字体和大小,以始终保持它可以支持的最大字体,而不截断。大多数情况下,我都是使用
adjustsFontSizeToFitWidth
,但是标签有额外的垂直空间,它不需要

在iPhone SE模拟器上运行的这个屏幕截图中,标签正确地将字体从55缩小到合适的大小,但是标签顶部有额外的空间。我想让那个空间消失

这是我的标签代码:

private lazy var label: UILabel = {
        let label = UILabel()
        label.font = .systemFont(ofSize: 55, weight: .ultraLight)
        label.adjustsFontSizeToFitWidth = true
        label.minimumScaleFactor = 0.25
        label.backgroundColor = .purple
        return label
    }()
这是我的布局代码:

self.addSubview(self.labelsContainerView)
self.labelsContainerView.snp.makeConstraints { (make) in
    make.leading.equalTo(leftView.snp.trailing).offset(20)
    make.trailing.equalTo(rightView.snp.leading).offset(-20)
    make.top.bottom.equalToSuperview()
}

self.labelsContainerView.addSubview(self.middleLabel)
self.middleLabel.snp.makeConstraints { (make) in
    make.leading.trailing.centerY.equalToSuperview()
}

self.labelsContainerView.addSubview(self.topLabel)
self.topLabel.snp.makeConstraints { (make) in
    make.leading.equalToSuperview()
    make.bottom.equalTo(self.middleLabel.snp.top)
    make.top.equalToSuperview().offset(8)
}

self.labelsContainerView.addSubview(self.bottomLabel)
self.bottomLabel.snp.makeConstraints { (make) in
    make.leading.equalToSuperview()
    make.top.equalTo(self.middleLabel.snp.bottom)
    make.bottom.equalToSuperview().offset(-8)
}
简而言之,我有一个
UIView
固定在我的
UITableViewCell
的顶部和底部。在该视图中,我有3个标签:顶部、中部和底部。标签从上到下固定


我希望
middleLabel
始终是最大的大小,以满足布局要求,并使用最大的字体,使其适合该大小而不截断。当标签的字体更改时,内部内容大小似乎没有更新。我尝试了对
setNeedsLayout()
layoutifneed()
的各种调用,但都没有用。

更改标签的高度需要做一些额外的工作,但是如果您只需要文本垂直居中,请将其添加到标签配置中:

label.baselineAdjustment = .alignCenters
区别就在这里。。。顶部使用默认值
。对齐基线
底部使用
。对齐中心


顶部和底部标签对中间标签的约束最终会放大中间标签。我建议在底部和中间标签之间尝试大于或等于的限制。有趣的是,我一直专注于中间标签的约束和属性,我没有真正考虑其他标签约束的影响。我将处理其中的一些约束。谢谢老实说,这不是我考虑过的。我仍然希望空间能更紧一些,但这至少是一个退路,而不是打一场败仗。谢谢你的主意!由于约束的设计方式,有些事情很难或根本不可能实现。可用的最佳选择是使用考虑字体和固定宽度的好方法计算中间标签所需的确切大小,以获得高度。然后设置高度和宽度约束。