誰かがUIScrollView
インスタンスのcontentInsetプロパティの用途を説明できますか?そして、例を示しますか?
コンテンツビューとそれを囲むスクロールビューとの間のインセットの距離を設定します。 aScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0);
良い スクロールビューに関するiOS参照ライブラリの記事 これには有益なスクリーンショットがあります(図1-3)-ここにテキストで複製します。
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
(cH = contentSize.height; cW = contentSize.width)
スクロールビューは、コンテンツビューに加えて、指定されたコンテンツインセットによって提供されるパディングを囲みます。
Jballの答えはコンテンツの挿入に関する優れた説明ですが、いつ使用するかという質問には答えません。彼の図から借ります:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
|content|
-------------↑-
それはあなたがそれを行うときに得られるものですが、その有用性はスクロールしたときにのみ示されます:
_|←_cW_→_|_↓_
|content| ← content is still visible
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
コンテンツの一番上の行は、スクロールビューのフレーム内にあるため、引き続き表示されます。上部のオフセットを考える1つの方法は、「上部までスクロールしたときにスクロールビューでコンテンツをどれだけシフトするか」です。
これが実際に使用されている場所を確認するには、iPhoneの組み込みの写真アプリをご覧ください。ナビゲーションバーとステータスバーは透明で、スクロールビューの内容は下に表示されます。これは、スクロールビューのフレームがそこまで伸びているためです。ただし、コンテンツの挿入用ではない場合、最上部に移動すると、コンテンツの最上部を透明なナビゲーションバーからクリアすることはできません。
コンテンツのインセットは、ユーザーインターフェイスの他の部分の下にあるコンテンツを持ちながら、スクロールバーを使用して引き続きアクセスできるという問題を解決します。つまり、コンテンツインセットの目的は、インタラクションエリアを実際のエリアよりも小さくすることです。
画面の3つの論理領域がある場合を考えます。
TOP BUTTONS
TEXT
BOTTOM TAB BAR
また、テキストがトップボタンの下に透過的に表示されないようにする必要がありますが、テキストはボトムタブバーの下に表示され、なおかつスクロールを許可するため、ボトムタブバーの下に透明にあるテキストを更新できます。
次に、上部の原点を上部ボタンの下に設定し、高さを下部タブバーの下部を含むように設定します。 BOTTOM TAB BARコンテンツの下にあるテキストにアクセスするために、BOTTOM TAB BARの高さに下部のインセットを設定します。
インセットがなければ、スクローラーは、入力するのに十分なコンテンツをスクロールアップできません。インセットでは、コンテンツに余分な「空白コンテンツ」が含まれているかのように、コンテンツインセットのサイズが決まります。空白のテキストは、実際の「コンテンツ」に「挿入」されています。これがコンセプトを覚えている方法です。
UIScrollView
にパディングを追加するために使用されます
contentInset
がない場合、テーブルビューは次のようになります。
次にcontentInset
を設定します。
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
効果は次のとおりです。
良くなったようですね。
そして、私は ブログ を書いてcontentInset
を研究していますが、批判を歓迎します。
いい質問ですね。
次の例を考えてください(scroller
はUIScrollViewです):
float offset = 1000;
[super viewDidLoad];
for (int i=0;i<500; i++) {
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(i * 100, 50, 95, 100)] autorelease];
[label setText:[NSString stringWithFormat:@"label %d",i]];
[self.scroller addSubview:label];
[self.scroller setContentSize:CGSizeMake(self.view.frame.size.width * 2 + offset, 0)];
[self.scroller setContentInset:UIEdgeInsetsMake(0, -offset, 0, 0)];
}
インセットは、スクロールしたいコンテンツに「ウィンドウ」を強制的に表示する唯一の方法です。私はまだこのサンプルコードをいじっていますが、アイデアはそこにあります。インセットを使用してUIScrollView
の「ウィンドウ」を取得します。