【问题标题】:Constraints on Label/Button to show entire text of label标签/按钮上的约束以显示标签的整个文本
【发布时间】:2018-04-24 16:38:45
【问题描述】:

对 Swift 来说是全新的。

我想将我的文本放在“开始”按钮上方,但要显示所有文本。在原始代码中,我有我想要的内容,但我不能显示整个标签文本。可以对此进行哪些编辑以显示整个文本?

原代码:

func setupViews() {
    self.view.addSubview(lblTitle)
    lblTitle.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 150).isActive=true
    lblTitle.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive=true
    lblTitle.widthAnchor.constraint(equalToConstant: 250).isActive=true
    lblTitle.heightAnchor.constraint(equalToConstant: 80).isActive=true

    self.view.addSubview(btnGetStarted)
    btnGetStarted.heightAnchor.constraint(equalToConstant: 50).isActive=true
    btnGetStarted.widthAnchor.constraint(equalToConstant: 150).isActive=true
    btnGetStarted.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive=true
    btnGetStarted.centerYAnchor.constraint(equalTo: self.view.centerYAnchor, constant: 0).isActive=true
}

let lblTitle: UILabel = {
    let lbl=UILabel()
    lbl.text="Bacon ipsum dolor amet shankle filet mignon bacon shank frankfurter buffalo. Swine andouille burgdoggen jerky. Kevin meatball jerky tri-tip tail, biltong meatloaf fatback cupim pork chop."
    lbl.textColor=UIColor.darkGray
    lbl.textAlignment = .center
    lbl.font = UIFont.systemFont(ofSize: 46)
    lbl.numberOfLines=2
    lbl.translatesAutoresizingMaskIntoConstraints=false
    return lbl
}()

let btnGetStarted: UIButton = {
    let btn=UIButton()
    btn.setTitle("Get Started", for: .normal)
    btn.setTitleColor(UIColor.white, for: .normal)
    btn.backgroundColor=UIColor.orange
    btn.layer.cornerRadius=5
    btn.layer.masksToBounds=true
    btn.translatesAutoresizingMaskIntoConstraints=false
    btn.addTarget(self, action: #selector(btnGetStartedAction), for: .touchUpInside)
    return btn
}()

}

【问题讨论】:

    标签: ios swift xcode autolayout nslayoutconstraint


    【解决方案1】:

    标签和按钮都具有 minimumScaleFactor 属性以及适合宽度的 Bool 属性。尝试使用它。

    button.titleLabel?.minimumScaleFactor = 0.1
    button.titleLabel?.numberOfLines = 2
    button.titleLabel?.adjustsFontSizeToFitWidth = true
    

    标签具有相同的属性来缩放字体。

     lbl.minimumScaleFactor = 0.1
     lbl.numberOfLines = 2
     lbl.adjustsFontSizeToFitWidth = true
    

    【讨论】:

    • 这开始修复它 - 它仍然奇怪地格式化文本,因为它显然受到一些约束,但我可以从这里开始工作。谢谢!
    • iOS 11 确实有一个你可能会看到的奇怪的自动换行
    【解决方案2】:
    1. 尝试更改标签的height 并将topAnchor 添加到按钮
    2. 在标签中添加adjustsFontSizeToFitWidthnumberOfLines=0sizeToFit()

      func setupViews() {
          self.view.addSubview(lblTitle)
          lblTitle.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 150).isActive=true
          lblTitle.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive=true
          lblTitle.widthAnchor.constraint(equalToConstant: 250).isActive=true
          lblTitle.heightAnchor.constraint(equalToConstant: 250).isActive=true
      
          self.view.addSubview(btnGetStarted)
          btnGetStarted.topAnchor.constraint(equalTo: lblTitle.bottomAnchor, constant: 20).isActive=true
          btnGetStarted.heightAnchor.constraint(equalToConstant: 50).isActive=true
          btnGetStarted.widthAnchor.constraint(equalToConstant: 150).isActive=true
          btnGetStarted.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive=true
          btnGetStarted.centerYAnchor.constraint(equalTo: self.view.centerYAnchor, constant: 0).isActive=true
      }
      
      let lblTitle: UILabel = {
          let lbl=UILabel()
          lbl.text="Bacon ipsum dolor amet shankle filet mignon bacon shank frankfurter buffalo. Swine andouille burgdoggen jerky. Kevin meatball jerky tri-tip tail, biltong meatloaf fatback cupim pork chop."
          lbl.textColor=UIColor.darkGray
          lbl.textAlignment = .center
          lbl.font = UIFont.systemFont(ofSize: 46)
          lbl.adjustsFontSizeToFitWidth = true
          lbl.numberOfLines=0
          lbl.sizeToFit()
          lbl.translatesAutoresizingMaskIntoConstraints=false
          return lbl
      }()
      

    【讨论】:

    • 还是会截断文字
    • 你在更改 numerOfLines 后添加了sizeToFit 吗?
    • 是的,它没有改变任何东西。
    • 看起来要编辑添加我之前放在下面的内容。也不需要 sizeToFit,因为它由自动布局控制。
    • 每个问题都有多种解决方案,这取决于用户根据自己的需要选择哪一种。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2011-10-10
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多