首页 > 解决方案 > 见下图,为什么两个标签(棕色)的组合高度与标签(红色)的高度不同?

问题描述

我只是将原始字符串\nfoo\n\nbar\n\nfoo\n\nbar\n切割成两个不同的字符串\nfoo\n\nbar\n\nfoo\n\nbar\n. 剪切的字符串将被设置到其专用标签中。我期待两个标签的组合高度与具有原始字符串的标签相同。你能指导我解释一下吗?有没有办法使组合的两个标签与一个标签相同,而无需从剪切字符串中添加/删除字符?

在此处输入图像描述

操场

import PlaygroundSupport
import Foundation
import UIKit

PlaygroundPage.current.needsIndefiniteExecution = true

let viewWidth: CGFloat = 100.0

func createLabel(_ text: String, _ backgroundColor: UIColor = .white) -> UILabel {
    let label = UILabel()
    label.text = text
    label.numberOfLines = 0
    label.backgroundColor = backgroundColor
    label.textColor = .black
    label.sizeToFit()
    label.frame.size.width = viewWidth
    return label
}

let view = UIView(frame: CGRect(x: 0, y: 0, width: viewWidth, height: 1000))
view.backgroundColor = .white

let label1 = createLabel("\nfoo\n\nbar\n", .green)
let label2 = createLabel("\nfoo\n\nbar\n", .blue)
let label3 = createLabel("\nfoo\n\nbar\n\nfoo\n\nbar\n", .red)
let label4 = createLabel("\nfoo\n\nbar\n", .brown)
let label5 = createLabel("\nfoo\n\nbar\n", .brown)
label2.frame.origin.y = label1.frame.maxY
label3.frame.origin.y = label2.frame.maxY
label4.frame.origin.y = label3.frame.maxY
label5.frame.origin.y = label4.frame.maxY

view.addSubview(label1)
view.addSubview(label2)
view.addSubview(label3)
view.addSubview(label4)
view.addSubview(label5)

PlaygroundPage.current.liveView = view

/*
\nfoo\n\nbar\n
\nfoo\n\nbar\n
*/

标签: iosswiftstringuilabel

解决方案


当您以这种方式组合 label4 和 label5 时,您将获得三个新行,

label4 应该是let label4 = createLabel("\nfoo\n\nbar", .brown)

最后删除\n


推荐阅读