与AutoLayout的UITextField边框闪烁

时间:2017-01-30 10:40:39

标签: ios iphone ipad autolayout

我正在设计屏幕,就像使用 AutoLayout 包含少量UITextFields一样。我想仅在UITextFields的底部设置边框。我使用CALayer设置了边框。但UITextField在方法viewDidAppear中占据其高度(在应用自动布局后),因此在UITextField中向viewDidAppear添加边框会使其看起来像是在闪烁。那么还有其他方法可以使用自动布局在底部将边框设置为UITextFeild

4 个答案:

答案 0 :(得分:1)

class CustomTextField: UITextField {

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
    self.commonInit()
}

override init(frame: CGRect) {
    super.init(frame: frame)
    self.commonInit()
}

func commonInit() {
    self.borderStyle = .none //To remove default border.

    let bottomBorder = UIView()
    bottomBorder.frame.size = CGSize(width: self.frame.size.width, height: 1)
    bottomBorder.frame.origin = CGPoint(x: 0, y: self.frame.size.height - 1)
    bottomBorder.backgroundColor = UIColor.lightGray
    bottomBorder.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
    self.addSubview(bottomBorder)
}

}

最后,我通过使用AutoLayout创建CustomUITextField来实现它。只需将上面的类应用于界面构建器中的UITextField即可。

答案 1 :(得分:0)

步骤 - 选择文本字段 - >显示属性检查器右侧面板并选择虚线边框样式。 接下来将uilabel拖入场景并将其设置为1.0和宽度,保持文本域的底部。所以你的问题就解决了。这可能会对你有帮助。

答案 2 :(得分:0)

如果我理解你,你要解决的问题就是在上面的方法中调用方法“绘制边框”而不是viewDidAppear。我想它可以解决你的问题。

override func viewDidLayoutSubviews() {
    //A UIViewController's overrode method
    //call you method here
}

此方法在视图出现之前调用,并在子视图布局之后调用。当你正在工作 - 改变我的意思 - 层时,你应该总是使用它而不是viewDidLoad

希望有所帮助:)

答案 3 :(得分:0)

如果您使用模拟器进行测试。它看起来像闪烁但不是。

  

如果要将模拟器缩放到25%。出现1px行和   滚动导致屏幕分辨率消失时消失   小于真实的设备分辨率。

在将模拟器缩放到100%时进行测试。 CMD + 1