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の画像を示します。再利用可能なツールビューを考える。
もう少し明確にしてみましょう... –
まずこのタスクを達成できるかどうかを見てみましょう。自分のXIB/NIBビューのコンテナビューを特定の高さにしたい。これらのXIB/NIBビューは特定のサイズでなければならず、スタックビューにする必要があります。このコンテナビューが非表示になったときにビューをアニメーション化できます。私はXIB/NIBの罰金なしでこれを行うことができますが、私は、私のXIB/NIBのfileOwnerのサブクラス化されたコンテナビューを使用してこれを達成することはできません。 –