2017-08-29 9 views
0

ビューを再利用したいので別のカスタムUIView Bに埋め込まれたカスタムUIViewを作成しました。次のようにXcodeカスタムUIViewが正しく表示されない

(SO省略2枚の以上の画像を投稿することはできません)

Iを使用SWIFTコードは:

override init(frame: CGRect) 
{ 
    super.init(frame: frame) 
    setupView() 
} 

required init?(coder aDecoder: NSCoder) 
{ 
    super.init(coder: aDecoder) 
    setupView() 
} 

private func setupView() 
{ 
    let view = viewFromNibForClass() 
    view.autoresizingMask = [ 
     .flexibleWidth, 
     .flexibleHeight 
    ] 
    view.frame = bounds 
    addSubview(view) 
} 

private func viewFromNibForClass() -> UIView 
{ 
    let bundle = Bundle(for: type(of: self)) 
    let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil).first as! UIView 
    return view 
} 

のUIView B、に(スタック内の)いくつかのUIView Aを確定しますビューは無作為にをスーパービューの左上に、時にはビューフレームの外にジャンプします。私は一時的にこれにリサイズマスクを変更する必要があります:

view.autoresizingMask = [ 
     .flexibleWidth, 
     .flexibleHeight, 
     .flexibleTopMargin, 
     .flexibleBottomMargin, 
     .flexibleLeftMargin, 
     .flexibleRightMargin 
    ] 

調整後に変更してください。しかし、私はでも、高さや距離などの単純な制約をsuperview.leadingに適用することはできません。複数の競合が発生することなくです。

Custom UIView B containing several UIView A

は、すべての競合を解決するために、私はすべての制約を削除して続行する必要があります。次に、メインのストーリーボードのビューコントローラにUIView Bを配置すると、ビューが奇妙な位置にジャンプします。私はこれが最初のクエリで概説されたUIViewの異常な動作に起因すると信じています。任意のヘルプまたはポインタのため

Generic view controller containing UIView B

ありがとう!

答えて

0

すべてのファイル(最初から削除して開始するのが足りない)を精査した後、XIBファイルにアイデンティティ・インスペクタで参照するカスタム・クラスがあることがわかりました。これはおそらく、それがそのinit(coder aDecoder: NSCoder)を再帰的に呼び出す原因となり、その位置が突然消えた。私はAutolayoutなしでカスタムビューを使用していたので、これを早期に検出しなかったし、すべてうまくいきました。はい、XIBのファイルの所有者が正しく設定されています。間違いを取り除き、すべてが良かった。

関連する問題