2009-04-04 4 views
1

私はUINavigationControllerの内部にUITableViewControllerを持っています。UIViewのアンカー

テーブルビューの上部にUIViewを表示したいが、テーブルビューをスクロールすることはできません。

I.e.テーブルビューがスクロールされている場合、UIViewはテーブルビューに対してではなく、画面に対して同じ位置にとどまる必要があります。それは特定の位置に固定されているように見えるはずです。

これを達成する最も良い方法は何ですか?

編集:明確にするために、ビューはテーブルビューの上部に透過的に浮かなければなりません。

多くの感謝!

+0

scrollIndicatorsはUIImageViews(これはデバッガで見ることができます)であり、scrollViewがスクロールするときには移動しないため、これが可能です。 UIScrollViewが常にその位置を調整しない限り。どのようなことが起こる可能性があります。 – mxcl

+0

さて、私はこれを試して、それは動作します。 – mxcl

答えて

0

アンタッチビューは、UITableView上、またはそのすぐ上に透明に表示される必要があります。つまり、アンカービューでは使用可能な領域の上位20%が使用されます。

いずれの場合でも、アンカービューとテーブルビューを含むUIViewを作成します。テーブルビューをスクロールするために、アンカービューを通過させる必要があるため、アンカービューをテーブルビューに透明にしたい場合は、ややこしいことです。

周辺ビューのビューコントローラを、テーブルビューだけでなくナビゲーションコントローラに追加します。

+0

ありがとうございましたが、アンカービューはテーブルビューの上に浮かなければなりません。 –

1

Peterと同様に、TableViewとサブクラス化されたUIViewの両方を含むUIViewを作成します。など:

また、フローティングビューのユーザー操作をオフにする必要があります。これは、特に基礎となるのUIViewのか、いないかのにタッチを渡すかどうかはわからない:

[myAnchoredView setUserInteractionEnabled:NO]; 

をこれはあなたのtableViewにタッチをブロックしている場合は、アンカービューにあなたのtableViewへの参照を渡す必要があるかもしれません初期化時にタッチイベントを渡します。 UIResponderのタッチレスポンスメソッドをオーバーライドすることで、これを行うことができます。 (より良い方法があれば、誰かが話をしてください。)

2

私はtableView上にフローティングUIViewを持っていたいと思っていました。
ので、(のUITableViewControllerです)私RootViewController以内に、これは私はUIScrollViewのは、そのUIScrollViewのの内容上記scrollIndicatorとデバッガでUIScrollViewのを調べることによって、まだ動かないを保つ方法を検討し、私

- (void)viewDidLoad { 
    /* mylabel is a UILabel set in this class */ 
    [self.mylabel setUserInteractionEnabled:NO]; 

    /* navigationController comes from higher up in the navigation chain */ 
    [self.navigationController.view addSubview:self.mylabel]; 
} 
0

のために働きました。

scrollIndicatorsはUIImageViewsです。 UIScrollView自体の直接の子孫であることがわかります。スクロールされたコンテンツも直接の子孫であることがわかります。スクロールインジケータが動かないのはどうですか?

静的コンテンツの位置を常に- (void)scrollViewDidScroll:(UIScrollView *)scrollViewに更新しようとしましたが、これは驚くべきことです。 UIScrollView自体がどうやっているのか分かりませんが、いくつかのプライベートマジックがなければ、このようなものでなければなりません。