web-dev-qa-db-ja.com

UIScrollviewにUITableViewを埋め込む方法

UIViewController(サブビューとしてテーブルビューを含む)で次のことを行うにはどうすればよいですか?

私は最初にプレビューセクション(UIView)を表示するUIViewControllerを持っています

//Setup container for preview section
UIView *tempContainer = [[UIView alloc]initWithFrame:CGRectMake(0, 20, 320, 100)];
self.preview_answer_container = tempContainer;
self.preview_answer_container.backgroundColor = [UIColor clearColor];
[tempContainer release];
[self.view addSubview:self.preview_answer_container];

以下にUITableView(および検索バー)も追加しました

//setup tableview
UITableView *tempTable = [[UITableView alloc]initWithFrame:CGRectMake(0,44 ,320,self.view.frame.size.height - 44)];
self.tagFriendsTableView = tempTable;
self.tagFriendsTableView.delegate = self;
self.tagFriendsTableView.dataSource = self;
[tempTable release];

[self.view addSubview:self.tagFriendsTableView];

enter image description here

この設定では、スクロール領域は小さくなります(プレビューセクションの下の静的領域のみ)

1)ページ全体を上にスクロールできます(プレビューセクションとテーブルビューが一緒に上にスクロールします)2)検索バーが上部(ナビゲーションバーの下)に達すると全体のスクロールが停止します(スクリーンショットを参照)、ただし、UITableViewのコンテンツは引き続きスクロール可能です

enter image description here

編集:

UIScrollビューのコードを追加しました。しかし、私にとっては何も変わりませんでした。私のコードの何が問題になっていますか?

//setup scroll view
UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

//Search
UISearchBar *tempBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 120 + 20, 320, 44)];
self.sBar = tempBar;
[tempBar release];
self.sBar.delegate = self;
self.sBar.tintColor = [UIColor colorWithHexString:@"#b6c0c7"];
self.sBar.placeholder = @"Search for FB and DM friends";

[scroll addSubview:sBar];

//setup tableview
UITableView *tempTable = [[UITableView alloc]initWithFrame:CGRectMake(0,144 + 20 + 20 ,320,self.view.frame.size.height - 144 - 20 - 20 - 44)];
self.tagFriendsTableView = tempTable;
self.tagFriendsTableView.delegate = self;
self.tagFriendsTableView.dataSource = self;
[tempTable release];

//Add the scroll view to the parent view
[scroll addSubview:self.tagFriendsTableView];

scroll.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);
[self.view addSubview:scroll];
[scroll release];
17
Zhen

私はあなたのための解決策を持っています、

tableViewのみを使用するだけで十分です

  1. tableViewのHeaderViewとして「プレビュービュー」を作成します

  2. tableViewのセクションヘッダービューとして「検索バー」を作成します

あなたはそれを完璧にすることができます:)

33
adali

特別なものやカスタムのものは必要ありません。UITableViewを使用し、プレビューペインをtableHeaderViewに設定し、検索フィールドをUITableViewDelegatetableView:viewForHeaderInSection:を使用してセクションヘッダーに設定します。

スクロールイベント中にテーブルヘッダーが上からスクロールします。セクションヘッダーはフロートし、表示されている場合はそのセクション全体で表示されたままになります。セクションが1つしかない場合は、セクションヘッダーが常に表示されます。

3
DBD

または、次の手順を実行することもできます。1.tableViewのスクロールを無効にします。 2.高さ制約をtableViewとそれに接続されたIBOutletに設定します。 3.データを再ロードする前に、テーブルの高さを計算します。 heightConstraint.constant = (heightOfTheSingleTableViewCell) * numOfRows

2
Slavcho

画面のサイズからナビゲーションバーを引いたサイズのUIScrollView内にUITableViewを埋め込む必要があります。 UIScrollViewsの背景をclearColorに設定して、UITableViewの上のコンテンツが表示されたままになるようにします。

1
rhummelmose
scroll.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);

ContentSizeが十分に大きくないため、スクロールできません。 scrollViewの上にあるコンテンツの全長に長さを増やす必要があります。

0
Ohmy

はい、「tableView:viewForHeaderInSection」を使用できます。

0
zucknet