我怎样才能使用 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】:移除你对label2
的right约束。
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的比例。我怎样才能务实地实现这一目标? [复制]