首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ios自动布局:动态宽度应该用SnapKit向下推第二个标签,正确的方式

ios自动布局:动态宽度应该用SnapKit向下推第二个标签,正确的方式
EN

Stack Overflow用户
提问于 2016-09-27 22:41:49
回答 1查看 454关注 0票数 0

我有两个UILabellbl1的文本可以改变,而lbl2的文本是静态的。

它们最初都设置在同一行上。我将lbl1numberOfLines设置为0 (无穷大)。当lbl2的宽度侵占lbl1的空间时,我希望lbl1下推并将其顶部与lbl2的底部对齐。我有一个当前的解决方案,但我觉得我缺少一种纯粹的自动布局方式。任何帮助都会很好!

两个标签都放在一行上:

在我纯自动布局的尝试中,lbl2不会降低速度:

所需:

当前的解决方案有效,但感觉不理想:

代码语言:javascript
复制
import XCPlayground
import SnapKit
import UIKit

let screen: UIView = UIView(frame: CGRectMake(0,0,320,568))
XCPlaygroundPage.currentPage.liveView = screen
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

let lbl1: UILabel = UILabel()
lbl1.text = "Short Text asnoetuha 1 1 1 1 "
lbl1.numberOfLines = 0
lbl1.backgroundColor = UIColor.whiteColor()

let lbl2: UILabel = UILabel()
lbl2.text = "Amount Text"
lbl2.backgroundColor = UIColor.yellowColor().colorWithAlphaComponent(0.5)

screen.addSubview(lbl1)
screen.addSubview(lbl2)

lbl1.snp_makeConstraints { (make: ConstraintMaker) in
  make.top.leading.equalTo(screen)
  make.width.lessThanOrEqualTo(screen.snp_width)
}

lbl2.snp_makeConstraints { (make: ConstraintMaker) in
  // Below lines feel un-ideal
  let lbl2X: CGFloat = screen.frame.width - lbl2.intrinsicContentSize().width
  let lbl1RightX: CGFloat = screen.frame.origin.x + lbl1.intrinsicContentSize().width
  let hasOverlap: Bool = lbl1RightX >= lbl2X

  make.top.equalTo(hasOverlap ? lbl1.snp_bottom : lbl1.snp_top).priorityLow()
  make.trailing.equalTo(screen)
}
EN

回答 1

Stack Overflow用户

发布于 2016-09-27 23:01:03

我相信你没有以正确的方式来处理这件事。您应该能够创建一个侦听lbl1的右锚与LBL2的左锚接触的函数(使用SnapKit非常容易)。

当发生这种情况时,您可以调用一个函数来重新生成约束,以适应您提供的图像。这可以通过调用snap_updateConstraints或snp_remakeConstraints来完成。然后,您的约束代码应该是直接的,因为您只需将lbl1的底部锚点固定到lbl2的顶部锚点,然后进行其他约束,直到您获得所需的效果。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39727655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档