使用adjustsFontSizeToFitWidth

时间:2018-04-22 08:33:51

标签: ios swift autolayout ios-autolayout

当我的UILabel的字体大小调整到适合标签的宽度时,文本的底部会被切断。这是调试视图的屏幕截图:

enter image description here

UILabel具有以下特征:

  • 系统字体(semibold,36pt)
  • numberOfLines = 1
  • baselineAdjustment = .alignCenters
  • translatesAutoresizingMaskIntoConstraints = false
  • 自动布局约束:固定顶部,左侧和右侧固定,并且没有底部或高度约束
  • adjustsFontSizeToFitWidth = true, minimumScaleFactor = 0.1
  • 默认情况下没有文字,初始化后会给出文字
  • lineBreakMode = .byWordWrapping

其他要素:

  • 仅当字体大小减小时才会发生这种情况。如果文本较短并且符合原始字体大小,则不会被截断。
  • 如果我手动更改字体大小以使文本适合,则不会被切断。只有当它自动调整到该字体大小时才会发生。

不起作用的事情:

  • 使用 .attributedText 而不是 .text 属性
  • 调用sizeToFits,setNeedsLayout()/ layoutIfNeeded()
  • 默认情况下将长文本设置为标签
  • 尝试 baselineAdjustment 的所有设置(设置为.none工作,请参阅答案)

(当我输入此问题时,我尝试再次更改 baselineAdjustment 设置以确认它无法正常工作,这一次,它有效。请参阅答案。) < / p>

1 个答案:

答案 0 :(得分:2)

当我输入答案并返回我尝试的每个设置时,将标签的 baselineAdjustement 设置为 .none 修复了问题。

        val latLngs: List<LatLng> = placeList.map { LatLng(it.placeLat, it.placeLon) }

        val latLngBound = LatLngBounds(
                LatLng(latLngs.minBy { it.latitude }?.latitude ?: DEFAULT_LAT,
                        latLngs.minBy { it.longitude }?.longitude ?: DEFAULT_LAT),
                LatLng(latLngs.maxBy { it.latitude }?.latitude ?: DEFAULT_LNG,
                        latLngs.maxBy { it.longitude }?.longitude ?: DEFAULT_LNG))

仅供参考,以下文件摘录让我感到困惑:

来自UILabel baselineAdjustement的文档:

  

此属性的默认值为 alignBaselines

来自UIBaselineAdjustment的文档:

  

.none:这是默认调整。

如果有人可以在评论中确认,我会感兴趣,但是从我的实验中, .none 似乎不是默认基线调整的UILabel 即可。我必须专门将baselineAdjustment设置为.none来修复问题中提到的错误。