2017-01-30 9 views
0

UITextFieldsを含むフォームのような画面をデザインしています。AutoLayoutを使用しています。私はUITextFieldsの下に境界線を設定したかったのです。私はCALayerを使って国境を設定しました。しかしUITextFieldはメソッドviewDidAppearで高さを占めているので、UITextFieldに境界を追加すると、viewDidAppearにはちらつきがあるように見えます。だから、のAutoLayoutで、ボーダーをUITextFeildの下に設定する方法はありますか?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%にスケーリングする場合。スクロールすると1ピクセルの行が表示され、 が消えます。画面の解像度が で実際のデバイスの解像度より小さいためです。

シミュレータを100%にスケーリングしながらテストします。 cmd + 1

+0

実際には、シミュレータと実際のデバイスの両方で点滅していました。 autolayoutがviewDidAppearメソッドのUITextFieldに完全に適用されているために起こっていました。また、viewDidLayoutSubviewsにボーダーを設定するのはベストプラクティスではありませんでした。 – Tejas

関連する問題