由于字体大小更改,Swift标签未更新帧
目前,我正在创建一个表视图,其中包含一个由于字体大小更改,Swift标签未更新帧,swift,uitableview,autolayout,uilabel,Swift,Uitableview,Autolayout,Uilabel,目前,我正在创建一个表视图,其中包含一个imageView,作为单元格内的主UI项,并且在顶部有一个标签。现在我面临一个问题,对于长文本,标签的框架不准确,对于长文本,它占用了大量空间,似乎有换行符,但没有,这就是问题: 这是标签的属性 这是我的ViewController和我正在使用的约束 其他细节 对于单元格,我没有添加额外的代码,我只有IBOutlets,没有更多 在cellforrowatinexpath上,除了设置图像和文本之外,我没有做更多的代码 感谢您尝试更改标签的内容优先权
imageView
,作为单元格内的主UI项,并且在顶部有一个标签。现在我面临一个问题,对于长文本,标签的框架不准确,对于长文本,它占用了大量空间,似乎有换行符,但没有,这就是问题:
这是标签的属性
这是我的ViewController
和我正在使用的约束
其他细节
IBOutlets
,没有更多cellforrowatinexpath
上,除了设置图像和文本之外,我没有做更多的代码感谢您尝试更改标签的内容优先权。您选择的字体(Noto Nastaliq Urdu Bold)具有非常特定的类型布局属性 将其与默认系统字体进行比较 使用此代码:
let fontDefault = UIFont.systemFont(ofSize: 17.0, weight: .bold)
guard let fontNotoBld = UIFont(name: "NotoNastaliqUrdu-Bold", size: 17) else {
fatalError("Could not create font!")
}
print("fontDefault.lineHeight:\t",fontDefault.lineHeight)
print("fontNotoBld.lineHeight:\t",fontNotoBld.lineHeight)
print()
print("fontDefault.ascender:\t",fontDefault.ascender)
print("fontNotoBld.ascender:\t",fontNotoBld.ascender)
print()
print("fontDefault.descender:\t",fontDefault.descender)
print("fontNotoBld.descender:\t",fontNotoBld.descender)
print()
print("fontDefault.xHeight:\t",fontDefault.xHeight)
print("fontNotoBld.xHeight:\t",fontNotoBld.xHeight)
print()
print("fontDefault.capHeight:\t",fontDefault.capHeight)
print("fontNotoBld.capHeight:\t",fontNotoBld.capHeight)
print()
我们在调试控制台中获得以下输出:
fontDefault.lineHeight: 20.287109375
fontNotoBld.lineHeight: 42.5
fontDefault.ascender: 16.1865234375
fontNotoBld.ascender: 32.368
fontDefault.descender: -4.1005859375
fontNotoBld.descender: -10.132000000000001
fontDefault.xHeight: 9.13916015625
fontNotoBld.xHeight: 9.112
fontDefault.capHeight: 11.97802734375
fontNotoBld.capHeight: 12.138000000000002
我不知道确切的原因,但我的假设是Noto Nastaliq Urdu支持更多的语言字符,这些字符的形状和高度往往非常不同
您可以使用更标准的字体,也可以设计UI以适应更大的间距
编辑 您可以尝试使用具有行高设置的属性文本。但是,它会影响文本的顶部间距,可能不够 下面是一个带有3个标签的示例:
- 顶部标签使用默认设置
- 第二个标签将maximumLineHeight更改为17
- 第三个标签将maximumLineHeight更改为26
let titleText = "Label with enough text to cause word wrapping onto multiple lines." guard let fontNotoBold = UIFont(name: "NotoNastaliqUrdu-Bold", size: 17) else { fatalError("Could not create font!") } // without paragraphStyle attribute var attrString = NSMutableAttributedString(string: titleText) attrString.addAttribute(NSAttributedString.Key.font, value: fontNotoBold, range:NSMakeRange(0, attrString.length)) label1.attributedText = attrString // with paragraphStyle max line height: 17 let ps2 = NSMutableParagraphStyle() ps2.maximumLineHeight = 17 attrString = NSMutableAttributedString(string: titleText) attrString.addAttribute(NSAttributedString.Key.font, value: fontNotoBold, range:NSMakeRange(0, attrString.length)) attrString.addAttribute(NSAttributedString.Key.paragraphStyle, value:ps2, range:NSMakeRange(0, attrString.length)) label2.attributedText = attrString // with paragraphStyle max line height: 26 let ps3 = NSMutableParagraphStyle() ps3.maximumLineHeight = 26 attrString = NSMutableAttributedString(string: titleText) attrString.addAttribute(NSAttributedString.Key.font, value: fontNotoBold, range:NSMakeRange(0, attrString.length)) attrString.addAttribute(NSAttributedString.Key.paragraphStyle, value:ps3, range:NSMakeRange(0, attrString.length)) label3.attributedText = attrString
通过更多的实验,例如在开始时添加一个换行符(
“\n”
),您可能能够使它达到令人满意的外观。您是否尝试在实际设备上运行它?这是否回答了您的问题?