【问题标题】:Swift text field border isn't the right widthSwift 文本字段边框不是正确的宽度
【发布时间】:2019-10-25 23:45:16
【问题描述】:

在回答here 之后,我生成了一个底部边框。

除了边框不是正确的宽度之外,这绝对有效。它设置了约束以匹配其下方按钮的宽度,但正如您所看到的那样,它会很短。

我错过了什么?

代码:

extension UITextField
{
    func setBottomBorder(withColor color: UIColor)
    {
        self.borderStyle = UITextBorderStyle.none
        self.backgroundColor = UIColor.clear
        let width: CGFloat = 3.0

        let borderLine = UIView(frame: CGRect(x: 0, y: self.frame.height - width, width: self.frame.width, height: width))
        borderLine.backgroundColor = color
        self.addSubview(borderLine)
    }
}

然后在 VC 中:

override func viewDidLoad() {

        authorNameOutlet.setBottomBorder(withColor: UIColor.lightGray)
    }

然后 Xcode 显示...

但模拟器显示...

我已经尝试过将文本字段的宽度设置为 0.7 x superview 宽度(与其下方的按钮相同)并将文本字段的宽度设置为按钮的宽度,但两者都不起作用.

【问题讨论】:

    标签: swift autolayout


    【解决方案1】:

    这是因为 AutoLayout。

    您可以将autoresizingMask 添加到您的线路中。

    borderLine.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
    

    【讨论】:

      【解决方案2】:

      您正在为边界线视图使用静态框架。在viewDidLoad 之后,您的视图控制器的视图被调整大小。

      选项 1:(又快又脏)

      将您的代码从 viewDidLoad() 移动到 viewWillAppear(_ animated: Bool)viewWillAppear 在视图控制器视图的第一个布局之后被调用

      选项 2:

      为您的边界线视图添加约束。这样您的边界线视图将自动调整大小。

      重要提示:

      不要忘记覆盖中的超级调用,否则你会遇到奇怪的错误!

      例如:

      override func viewDidLoad() {
          super.viewDidLoad()
          // your code
      }
      

      【讨论】:

        猜你喜欢
        • 2017-11-18
        • 2017-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多