ExpandableLabel显示孟加拉语字体顶部被截断如何解决?
你之前尝试的换行规则、sizeToFit、基线调整都没有触及复杂文字预留显示空间的核心问题,针对孟加拉语这类带顶部修饰的小语种文字截断问题,可按以下优先级尝试解决方案:
- 优先给ExpandableLabel增加顶部内边距,预留文字上部修饰的显示空间
如果你使用的版本支持textInsets属性,直接赋值即可,数值可根据实际显示效果微调:
若没有内置textInsets属性,可继承重写文本计算方法:descriptionLabel.textInsets = UIEdgeInsets(top: 4, left: 0, bottom: 0, right: 0)
替换原控件的类为你自定义的子类即可。class CustomExpandableLabel: ExpandableLabel { override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect { let originRect = super.textRect(forBounds: bounds, limitedToNumberOfLines: numberOfLines) // 顶部额外释放4pt空间,可按需调整 return originRect.inset(by: UIEdgeInsets(top: -4, left: 0, bottom: 0, right: 0)) } } - 修正字体上行高度参数
孟加拉语的特殊修饰会超出普通字体默认的上行高度范围,可手动调整字体的ascent值:guard let originFont = descriptionLabel.font else { return } descriptionLabel.font = originFont.withAscent(originFont.ascender + 4) - 调整约束优先级
检查当前控件的高度约束,如果设置了固定高度,把固定高度的优先级降到750,优先让内容自动撑开高度,仅保留左、右、顶部三个必要的定位约束即可。 - 排查控件内部硬编码参数
检查ExpandableLabel内部实现是否有写死的行高、最大高度限制,删除硬编码值,改为系统自动计算文本高度的逻辑。
内容的提问来源于stack exchange,提问作者As If Prince
相关产品推荐
相关产品推荐

