我怎样才能使用 SnapKit 实现这一点?

Posted

技术标签:

【中文标题】我怎样才能使用 SnapKit 实现这一点?【英文标题】:How can I use SnapKit achieve this? 【发布时间】:2018-09-18 07:14:49 【问题描述】:

我想要的是这样的:

这是我的代码:

    let label1 = UILabel()
    let label2 = UILabel()
    label1.textColor = .white
    label1.backgroundColor = .red
    view.addSubview(label1)
    label1.snp.makeConstraints  (m) in
        m.left.equalToSuperview().offset(100)
        m.top.equalToSuperview().offset(100)
    
    view.addSubview(label2)
    label2.snp.makeConstraints  (m) in
        m.left.equalTo(label1.snp.right)
        m.top.equalToSuperview().offset(100)
        m.right.equalToSuperview().offset(-100)
    
    label1.text = "123456"
    label2.text = "789"

它是这样工作的:

为什么它不向左对齐? 我哪里错了?

【问题讨论】:

【参考方案1】:

移除你对label2right约束。

label2.snp.makeConstraints  (m) in
    m.left.equalTo(label1.snp.right)
    m.top.equalToSuperview().offset(100)
    // m.right.equalToSuperview().offset(-100)

您的 label2 已附加到超级视图的左侧,距离为 100。因此,由于 label1 没有设置宽度,它会调整大小以尊重 @987654325 的右侧约束@,从而满足您设置的所有约束。

如果你不能移除左约束,那么你需要在没有任何文本约束的情况下获取标签的宽度。你可以像这样得到它。例如,

let label = UILabel()
label.text = "Blah"
let width = label.intrinsicContentSize.width

现在您使用 snapKit 将此宽度设置为 label1 的宽度。并将左约束设置为小于或等于 100。

或者更好的方法,您也可以尝试使用带有属性文本的单个标签。由于您知道第一个标签和第二个标签的字符串,您可以轻松地将其格式化为NSAttributedString,从而避免了多个标签的约束问题。

let string1 = NSAttributedString(string: "Your first string", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.backgroundColor: UIColor.red])
let string2 = NSAttributedString(string: "Your second string", attributes: [NSAttributedString.Key.foregroundColor: UIColor.black, NSAttributedString.Key.backgroundColor: UIColor.white])
var finalString: NSMutableAttributedString = NSMutableAttributedString()
finalString.append(string1)
finalString.append(string2)

现在将锚点设置为 10 右、上、-10 左。

【讨论】:

我不能,因为我需要这个约束,你还有其他建议吗? @Lixiang 为什么?当你删除它时它工作了吗?您可能想尝试一下属性字符串。 你有没有办法让 label1 的宽度刚好等于它的文本宽度? @Lixiang “我不能,因为我需要这个约束” “为什么?” 不应该越界

以上是关于我怎样才能使用 SnapKit 实现这一点?的主要内容,如果未能解决你的问题,请参考以下文章

我想改变visualViewport的比例。我怎样才能务实地实现这一目标? [复制]

在方向改变时重新计算 SnapKit 约束

我怎样才能实现对主题的消息处理一次?

定义 SnapKit 值时,CGAffineTransform 旋转会导致宽度和高度之间的切换

我怎样才能做到这一点? - 动画报价 - JQuery

使用自动布局和 SnapKit 进行相对定位