AutoLayout学習ノート(一)

1715 ワード

曖昧なレイアウトのデバッグ


1.hasAmbiguousLayoutを使用して制約が十分かどうかをテスト


コンストレイントが十分であればNOを返し、ビューに別のフレームが表示される可能性がある場合はYESを返します。


2.ビューの内容の大きさは、各ビューのintrinsicContentSize属性で表現する

UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageWithName:@"icon.png"]];

NSLog(@"%@", NSStringFromCGSize(iv.intrinsicContentSize));


結果出力のサイズはピクチャiconサイズと同じです


曖昧なレイアウトでは、通常、各座標軸に2つのアトリビュートを設定する必要があります。当時、図には1つのコンテンツが大きい場合、2つのプロパティのうちの1つを設定するだけです。たとえば、テキストベースのコントロールまたは画像ビューを親ビューの中心に配置することができ、そのレイアウトは曖昧なレイアウトではありません。内在的なコンテンツサイズとビュー位置は共に十分に定められたレイアウトを構成している.


ビューの内部コンテンツを変更する場合は、=i n v a l i d ateIntrinsicContentSize==メソッドを呼び出し、AutoLayoutに次のレイアウトで再計算することを知らせる必要があります。


3.長方形と画像全体の境界を揃えることを知っていれば、この方法に渡す必要があるエッジinsetを自動的に計算することができる。

UIEdgeInsets BuildInsets(CGRect alignmentRect , CGRect imageBounds){
    //Ensure alignment rect is fully within source,CGRectIntersection 
    CGRect targetRect = CGRectIntersection(alignmentRect,imageBounds);
    
    //Calculate insets
    UIEdgeInsets insets;
    insets.left = CGRectGetMinX(targetRect) - CGRectGetMinX(imageBounds);
    insets.right = CGRectGetMaxX(imageBounds) - CGRectGetMaxX(targetRect);
     insets.top = CGRectGetMinY(targetRect) - CGRectGetMinY(imageBounds);
    insets.bottom = CGRectGetMaxY(imageBounds) - CGRectGetMaxY(targetRect);
    
    return insets;
}

4. translatesAutoresizingMaskIntoConstraints = NO;


コードセグメント全体でt r a n s l a t e s t o u r s e z i n g MaskIntoConstraintsをNOに設定すると、デフォルトの初期値は実質的に破棄され(例えば、初期のframeサイズが先に設定されている)、幅が0になる可能性があります。