2017-01-30 21 views
0

我正在設計屏幕像一個窗體,包含幾個UITextFields使用AutoLayout。我只想在UITextFields的底部設置邊框。我已使用CALayer設置邊框。但UITextField在方法viewDidAppear中佔據了其高度(在應用自動佈局之後),因此在viewDidAppear中向UITextField添加邊框使其看起來好像其閃爍。那麼是否有其他方式設置邊界UITextFeild底部AutoLayout與AutoLayout的UITextField邊界閃爍

+0

你用UITextField底部的簡單UIView試過了嗎?我的意思是把UIView的高度說成1px,然後對它應用約束,以便它總是附着在UITextField的底部。 –

+0

謝謝,我們可以使用UITextFeild底部的UIView作爲邊框,但我必須切換textFieldDidBeginEditing和textFieldDidEndEditing之間的邊界顏色,因此我使用的是CALayer。 – Tejas

+0

你不能在這些方法中更改UIView的顏色嗎? –

回答

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) 
} 

}

最後我用自動版式創建CustomUITextField實現它。只需將上面的類應用於界面構建器中的UITextField。

0

步驟 - 選擇文本框 - >顯示屬性檢查器右側面板並選擇虛線邊框樣式。 接下來將uilabel拖入場景中,並將其設置爲1.0和寬度,然後保留文本框的底部。所以你的問題解決了。這可能會幫助你。

+0

在這種情況下,使用高度爲1.0的UILabel/UIView作爲邊框是唯一的選擇。 – Tejas

0

如果我對你有所瞭解,你需要做的所有事情都是在上述方法中調用方法「繪製邊框」而不是viewDidAppear。我想它可以解決你的問題。

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

該方法在視圖出現之前和子視圖佈局之後調用。當你在工作 - 改變我的意思 - 圖層時,你應該總是使用它,而不是viewDidLoad,例如。

希望它能幫助:)

0

如果您使用模擬器來測試。它看起來像它的閃爍,但它不是。

如果您將模擬器縮放到25%。滾動時會出現1px線,並且 消失,因此您擁有的屏幕分辨率比實際設備分辨率低 。

將模擬器縮放到100%進行測試。 cmd + 1

+0

實際上它在模擬器和實際設備上都閃爍。發生這種情況是因爲自動佈局完全應用於方法viewDidAppear中的UITextField。在viewDidLayoutSubviews中設置邊界不是最佳做法。 – Tejas