テキストビューとイメージビューを含むセルを含むテーブルビューがあります。私のプロジェクトは現在 AutoLayout を使用しています。私の目標は、イメージビューをタップしたときにフルスクリーンで表示することです。1 つのオプションはモーダル ビュー コントローラーを使用することですが、Facebook アプリで画像をタップするのと同じように機能させたいと考えています。アプリは画像を中央に配置し、背景をフェードします。
私は自動レイアウトを使用しているため、画像ビューのフレームを画面いっぱいに設定することはできません。代わりに、自動レイアウト制約を使用する必要があります。私の画像ビューには、セルの下部からの距離を設定する制約、左右の側面、および画像の高さを制御する制約の 5 つの制約があります。最後は、画像ビューの上のテキストビューと画像の上部の間の垂直方向のスペースの制約です。これは高さと底の制約と競合するように見えますが、何らかの理由でインターフェイス ビルダーがこれを強制します。問題を回避するために、この制約の優先度を 1000 未満に設定しました (すべてが完全に収まるようにテーブルビューのセルの高さが設定されているため、画像がテキストビューと重なってはいけません)。
画像を中央に配置するには、左右からの距離をゼロに設定し、垂直方向のスペースの制約を取り除きます。画像を中央に配置するために、テーブルビューセルではなくUIWindowに対して、下部スペースの制約を中央の y 配置制約に置き換えます。セルではなく、画面の中央に配置したい。
メインウィンドウを取得するには、これを使用します:
AppDelegate* myDelegate = (((AppDelegate*) [UIApplication sharedApplication].delegate));
//access main window using myDelegate.window
次に、制約を設定するには:
//currently sets the distance from the bottom of the cell to 14
//changing it...
[cellselected removeConstraint:cellselected.imagebottomspace];
cellselected.imagebottomspace = [NSLayoutConstraint constraintWithItem:cellselected.viewimage attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:myDelegate.window attribute:NSLayoutAttributeCenterY multiplier:0 constant:0];
[cellselected addConstraint:cellselected.imagebottomspace];
ただし、これは機能しません。画像ビューの幅と高さの変更は問題なく適用されます。しかし、imagebottomspace 制約を読み直すと、満足できないレイアウトが得られます。どうやら、この制約は、下と画像ビューの間の距離を 14 に設定する別の制約と競合しているようです。したがって、実際には制約を削除していないようです。
続行してアプリに制約を破らせると、イメージビューは移動しますが、間違った場所に移動します。画面の中央に配置されていません。画面の上下に移動します。
明らかに、私がしていることは正しくありません。私は何を間違っていますか?