UIView をサブクラス化してカスタム groupView を作成し、簡単な方法でレイアウトにいくつかのものを追加しました。この groupView には、見出しとして使用される UILabel と、背景色を持つ CALayer に roundRect を描画する UIView が含まれています。UITableView のセクションを考えてみてください。UIView をドロップし、そのクラスをサブクラスに変更することで、この groupView をストーリーボードに追加します。Xcode でユーザー定義のランタイム属性を使用して見出しを設定しました。ストーリーボードのこのビューに UILabels を追加すると、実行時に見出しラベルと roundrect が作成されます。
私のgroupViewの構造:
- groupView: (UIView)clipToBounds:NO;
- 見出し: (UILabel) groupView の上に配置されます。
- contentView:(UIView) は、CALayer を介して roundRect と色を作成し、groupView と同じサイズにする必要があります。
だから問題は何ですか?自動レイアウトを扱うのは最初は面倒ですが、このサブクラス化された UIView を機能させるには、contentView の制約をプログラムで設定する必要があります。この自動レイアウト ASCII フォーマット文字列の構文がわかりません。現在私は持っています:
_contentView = [[UIView alloc]initWithFrame:self.bounds];
_contentView.layer.cornerRadius = 5.0f;
_contentView.layer.masksToBounds=YES;
_contentView.backgroundColor=_backgroundColor;
_contentView.layer.borderWidth=_borderWidth;
_contentView.layer.borderColor=_borderColor.CGColor;
[self insertSubview:_contentView atIndex:0];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(self,_contentView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"[self]-0-[_contentView]-0-[self]" options:0 metrics:nil views:viewsDictionary];
for (NSLayoutConstraint *constraint in constraints) {
[_contentView addConstraint:constraint];
}
*キャッチされない例外 'NSGenericException' が原因でアプリを終了しています。理由: 'ビューに制約をインストールできません。制約は、ビューのサブツリーの外部から何かを参照していますか? それは違法です。制約: ビュー:>'
私はこれを最初に試しましたが、それでもうまくいきませんでした:
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_contentView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-0-[_contentView]-0-|" options:0 metrics:nil views:viewsDictionary];
*キャッチされない例外 'NSGenericException' が原因でアプリを終了しています。理由: 'ビューに制約をインストールできません。制約は、ビューのサブツリーの外部から何かを参照していますか? それは違法です。制約: ビュー:>'
RANT: どういうわけか、この AutoLayout は私たちの作業を節約すると思われますが、今のところ利点がどのようにオーバーヘッドを上回っているかわかりません。いったいなぜ彼らは、参照やメソッド、さらには型定義を使用することから、この古風なフォーマット文字列に移行したのでしょうか? [_contentView constraint:NSLayoutFormatAlignLeading toView:self withDistance:0.0f]; または似たようなものですか?この時点では、むしろスプリングとストラットを扱いたいと思います。
contentView を self のサイズに制限するための構文を理解したり、表示したりするのに役立ちます。