2017-01-07 6 views
1

自動レイアウトが正しく設定されています。しかし、私がカスタムUITextFieldクラスを横向きに使用すると、境界線は変更されません。私は次のコードを使用します:カスタムテキストフィールドを使用した自動レイアウト

required init?(coder aDecoder: (NSCoder!)) { 
     super.init(coder: aDecoder) 
     self.delegate=self; 
     border.borderColor = UIColor(netHex: 0xc6c6c6).cgColor 

     border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height) 
     border.borderWidth = width 
     self.layer.addSublayer(border) 
     self.layer.masksToBounds = true 
     //self.font = UIFont(name: "System", size: CGFloat(23)) 
    } 

    override func draw(_ rect: CGRect) { 
     border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height) 



    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height) 


    } 

オリエンテーションが変更されたときに私のカスタムボーダーサイズを変更するには?

+0

このコードはどのようにautolayoutに関連していますか? – Axel

+0

さらに、ポートレートモードとランドスケープモードのイメージがありますか? – Zico

+0

すみません。問題は、自動レイアウトではなく境界からです。私が向きを変えると、私のカスタムボーダー幅は変更されません。 –

答えて

0

私のアプリには、向きが変わったときに制約を変更する必要があります。 ですが、サイズクラスと特性コレクションを使用していますが、私のニーズはそれを超えています。

サイズクラスはほとんどの場合非常にうまく動作しますが、スタックコントロールもかなりうまく動作しますが、できるだけGLKViewを最大限にする必要があったため、スライダを下から(縦)から右(横) 。サイズクラスを普遍的なアプリケーションコードに使用すると、向きが何であっても、iPadsのサイズが「通常」であることをすぐに知ることができます。 。私は、次のしている私のビューコントローラで

extension UIView { 
    public func orientationHasChanged(_ isInPortrait:inout Bool) -> Bool { 
     if self.frame.width > self.frame.height { 
      if isInPortrait { 
       isInPortrait = false 
       return true 
      } 
     } else { 
      if !isInPortrait { 
       isInPortrait = true 
       return true 
      } 
     } 
     return false 
    } 
} 

var initialOrientation = true 
var isInPortrait = false 

override func viewWillLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    if initialOrientation { 
     initialOrientation = false 
     if view.frame.width > view.frame.height { 
      isInPortrait = false 
     } else { 
      isInPortrait = true 
     } 
    } else { 
     if view.orientationHasChanged(&isInPortrait) { 
      // place your orientation change code here - isInPortrait will indicate which orientation the device is in 
     } 
    } 
} 
ここ

が、私はこのアプリは、それがであるものの向きをチェックするためにコード化されてきた方法ですまず

、私はUIViewの拡張しました

私はviewWillLayoutSubviews()が当初のヒットとなるたびに、そして向きが変わるたびに、私には最高のスポットだと分かりました。 viewDidLayoutSubviews()とviewWillTransistionTo(size :)の他の場所もありますが、WWDCの話はです。Making Apps Adaptive Part 2もこれを使用しています。さらに、あなたは今必要なすべてのビューサイズを持っています!

重要なことは、viewWILLLayoutSubviews()がアプリの起動や向きの変更中に何回か呼び出されることがあるため、コードを記述する必要があることです。 2つのブール変数を作成して、コードを実行するのは1回だけです。

関連する問題