2017-06-15 4 views
0
私は迅速なiOSの10

NIB/XIBではStackViewの制約の動作が異なりますか?

私はスタックビューを作成し、その中の2つのオブジェクトを持っているにXIB/nibファイル内の再利用可能なビューを作成し、私のstackviewはのコンテナビューに拘束されていることを確認しようとしている

nib/xib(トップからトップ、ボトムからボトム、先頭につながり、最後に最後から後ろに続く)、最初のオブジェクトと2番目のオブジェクトのY位置が不足しているというエラーが表示されます。それらのうちの1つだけを作成すると、通常それが修正されます。これは横に行くべきものですが。これまでのすべての研究で、私のスタックビューをFillに配布している場合、これを行う必要はありません。これは静かなXcodeのようですが、私のプログラムを実行しようとすると、オーバー制約問題が発生します。ここで

は、私は私のメインのストーリーボードからビューで私のペン先をロードするために使用するものである:

public protocol NibOwnerLoadable: class { 
    static var nib: UINib { get } 
} 

//MARK:- Generic Implementation 
public extension NibOwnerLoadable { 
    // Use the xib file with the same name as your UIView subclass located in the bundle of that class 
    static var nib: UINib { 
     return UINib(nibName: String(describing: self), bundle: Bundle(for: self)) 
    } 
} 

//MARK:- Support for instation from the XIB file 
public extension NibOwnerLoadable where Self: UIView { 
    // Function to load content and constraints automatically 
    func loadNibContent() { 
     let layoutAttributes: [NSLayoutAttribute] = [.top, .leading, .bottom, .trailing] 
     for view in Self.nib.instantiate(withOwner: self, options: nil) { 
      if let view = view as? UIView { 
       view.translatesAutoresizingMaskIntoConstraints = false 
       view.frame = bounds 
       self.addSubview(view) 
       layoutAttributes.forEach{ attribute in self.addConstraint(NSLayoutConstraint(item: view, attribute: attribute, relatedBy: .equal, toItem: self, attribute: attribute, multiplier: 1, constant: 0.0)) 
       } 
      } 
     } 
    } 
} 

私は私の問題は、自動レイアウトではなく、なぜ、どこで追加された余分な制約である知っています。この他の質問は私がやろうとしていることに非常に近いですが、なんらかの理由で私のAutoLayoutの知識が私の頭の中で混乱しています。 Adding a subclassed UIView to a Nib with its auto layout constraints 少し助けていただければ幸いです。なぜそれを行うのかだけではなく、理由を説明してください。私は裏話を理解したい人です。それは論理的であり、保持しやすくなります。

ここでは、私のストーリーボード内の1つのビューコントローラ内にロードされたFilterView(UIView)としてsearchAndFilterViewとしてロードされるnib/xibとしての私のfilterViewの画像を示します。再利用可能なツールビューを考える。

Storyboard ViewController

FilterView XIB

SearchAndFilterView XIB

+0

もう少し明確にしてみましょう... –

+0

まずこのタスクを達成できるかどうかを見てみましょう。自分のXIB/NIBビューのコンテナビューを特定の高さにしたい。これらのXIB/NIBビューは特定のサイズでなければならず、スタックビューにする必要があります。このコンテナビューが非表示になったときにビューをアニメーション化できます。私はXIB/NIBの罰金なしでこれを行うことができますが、私は、私のXIB/NIBのfileOwnerのサブクラス化されたコンテナビューを使用してこれを達成することはできません。 –

答えて

0

Woohou!

ここで私はこれをどのように理解しましたか。

XIB/NIBを使用して私のビューの高さの制約が、隠されていないときにビューをセットアップするために必要であることを認識しました。しかし、私が.isHiddenを真の値に設定すると、これは高さの制約と衝突します。

ビューが非表示から非表示に、またはその逆に変更されたときに、Autolayoutに自動レイアウトを行わせる必要がありました。 Priorityデフォルト値1000の制約を設定することで、この制約が常に有効であることを絶対に確かめるためにAutolayoutに伝えていました。

私は、優先度を999に設定することによって、Autolayoutに、本当にそれを行う必要があるときに私の制約を上書きできると言いました。なぜ999ですか、私は、ビューが隠されているとき、それは実際にはサイズを持たず、それはAutolayoutにとって非常に高い優先度であると思います。

私はこれを知っていたか、前もってデフォルトの自動レイアウト優先順位を見つける方法を知りたがっています。

誰かがこれについてもっと知っているなら、私はより多くの情報やリンクを感謝します!

関連する問題