问题描述
当前,我正在创建一个表格视图,其中包含一个df <- structure(list(x = c(-0.951618567265016,-0.0450277248089203,-0.784904469457076,-1.66794193658814,-0.380226520287762,0.918996609060766,-0.575346962608392,0.607964322225033,-1.61788270828916,-0.0555619655245394
),y = c(0.519407203943462,0.301153362166714,0.105676194148943,-0.640706008305376,-0.849704346033582,-1.02412879060491,0.117646597100126,-0.947474614184802,-0.490557443700668,-0.256092192198247),color = structure(c(1L,1L,2L,3L,4L
),.Label = c("1","2","3","4"),class = "factor"),shape = structure(c(1L,1L),"3"),class = "factor")),class = "data.frame",row.names = c(NA,-10L))
g <- ggplot() +
geom_point(data = df,aes(x = x,y = y,colour = color,shape = shape)) +
theme(legend.position = "right")
作为单元格内的主UI项,并在顶部带有标签。现在,我面临一个问题,对于长文本,标签的框架不准确;对于长文本,它占用了大量空间,似乎有换行符,但没有,这是问题:
这是我的imageView
和我正在使用的约束
View Controller on Storyboard
其他详细信息
谢谢
解决方法
尝试更改包含标签优先级的内容
,您选择的字体-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,attrString.length)) attrString.addAttribute(NSAttributedString.Key.paragraphStyle,value:ps2,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:ps3,attrString.length)) label3.attributedText = attrString
结果如下:
通过更多的实验,例如在开头添加换行符("\n"
),您也许可以使它看起来令人满意。