我遇到了一个问题,我需要设置动画来垂直翻译一个与textField文本高度相同距离的标签。在大多数情况下只有textField.bounds.heigt
,但如果textField的高度大于文本高度,那对我来说就不会有任何好处。所以我需要知道:
如何计算字符串文字的行高UIFont
?
关于副本: 我需要的东西有点不同。答案(我在答案中引用)得到总高度取决于1)字符串2)宽度3)字体。我需要的是只有字体的一行高度。
答案 0 :(得分:12)
UIFont
有一个属性lineHeight
:
if let font = _textView.font {
let height = font.lineHeight
}
其中font是你的字体
答案 1 :(得分:4)
我一直在寻找一种方法来查找这个answer,其中String
扩展名为extension UIFont {
func calculateHeight(text: String, width: CGFloat) -> CGFloat {
let constraintRect = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude)
let boundingBox = text.boundingRect(with: constraintRect,
options: NSStringDrawingOptions.usesLineFragmentOrigin,
attributes: [NSAttributedStringKey.font: self],
context: nil)
return boundingBox.height
}
}
,以计算字符串和给定字体的大小。我已将其修改为我想要的(获取使用字体写入文本的行高。):
Template.chart.onRendered(function () {
var template = this;
template.subscribe('yelp', function () { // Wait for the data to load using the callback
yelp_data = Yelp.find().fetch();
var ndx = crossfilter(yelp_data)
});
});
我希望这有助于有人寻找它。 (将来可能是我自己)。
答案 2 :(得分:0)
我过去曾使用此String扩展名来绘制一些文本,而不是在某个地方创建UILabel。我不喜欢我似乎无法获得要绘制的特定文本的实际高度的事实(并非每个字符串都包含大写字母或带有降序的字符等),我使用了两个枚举来表示围绕给定点的水平和垂直对齐。 在垂直高度打开想法。
public func draw(at pt: CGPoint,
font: UIFont? = UIFont.systemFont(ofSize: 12),
color: UIColor? = .black,
align: HorizontalAlignment? = .Center,
vAlign: VerticalAlignment? = .Middle)
{
let attributes: [NSAttributedString.Key : Any] = [.font: font!,
.foregroundColor: color!]
let size = self.boundingRect(with: CGSize(width: 0, height: 0),
options: [ .usesFontLeading ],
attributes: [ .font: font! ],
context: nil).size
var x = pt.x
var y = pt.y
if align == .Center {
x -= (size.width / 2)
} else if align == .Right {
x -= size.width
}
if vAlign == .Middle {
y -= (size.height / 2)
} else if vAlign == .Bottom {
y -= size.height
}
let rect = CGRect(x: x, y: y, width: size.width, height: size.height)
draw(in: rect, withAttributes: attributes)
}