2

お手数をおかけして申し訳ありませんが、いくつかのimageViewを遅延ロードしてから、UITableViewのコンテンツに比例してサイズを変更しようとしています。私はまた、基本的に初めて Autolayout を使用しようとしています (おそらく賢明ではありませんか?)。この場合、制約が機能しない理由がわかりません。適切な画像を読み込んだ後、UIImageView のサイズを変更するために使用しているコードを次に示します。

// Scale the image view and return it.
- (UIImageView *) scaleImageViewForScreenWidth:(UIImageView *)imageView {
    UIImage *imgFromView = [imageView image];
    CGRect newFrame = CGRectMake(0, 0, imgFromView.size.width, imgFromView.size.height);

    float imgFactor = newFrame.size.height / newFrame.size.width;
    newFrame.size.width = [[UIScreen mainScreen] bounds].size.width;
    newFrame.size.height = newFrame.size.width * imgFactor;
    [imageView setFrame:newFrame];
    return imageView;
}

制約に関する限り。メインのイメージビューの下部に影付きのラベルと UIImageView を添付しようとしています。イメージビューの下部の影に適用する制約を次に示します。下の影の制約は次のとおりです。

Height Equals:  83
Align Bottom to: Background Image View
LeadingSpace to: Table View Cell

私は欲しいものを手に入れていません。何か案は?自動レイアウトと戦っているような気がします。

4

2 に答える 2

9

リクエスト通り!Autolayout を使用するためのガイドラインを次に示します。これは非常に役立ちます。

まず、理想的なアプローチは、Interface Builder で設定を行い、それ以上のプログラミングが不要になることです。したがって、たとえば、ビューの境界が変更された場合、ビューは必要に応じて自動的に調整されます。

それでも問題が解決しない場合は、プログラムで制約を更新する必要がある場合があります。さて、前述のゴールデン ルールは、制約を更新することです。UIView基礎となるフレームを更新する誘惑に抵抗してください!

したがって、次のようにします。

_myWidthConstraint.constant = 300.f;

次に注意すべきことは、これを特定の場所で行う必要があることです。これは、UIViewサブクラス メソッド内にありupdateConstraintsます。

- (void)updateConstraints
{
    [super updateConstraints];
    _myWidthConstraint.constant = 300.f;
}

どうやってそれを引き起こしますか?呼び出すことによって:

    [self setNeedsUpdateConstraints];

お役に立てれば!詳細については、Ole Begemann の優れた記事Cocoa Autolayout について知っておくべき 10 の事柄 を参照してください。

WWDC ビデオを忘れないでください。これらは不可欠です!

また、iOS Auto Layout Demystifiedという本もあります。購入したものの、まだ読む機会がありません。しかし、それはかなりよく見えます。

于 2013-06-25T14:35:41.340 に答える