headerView
があります。デフォルトの状態は折りたたまれています。UIControlのフレームを設定すると、ビューの境界が変更されますが、タッチが届く場所は変更されません。
次のコードを使用してheaderView
を展開します。
if (!self.headerViewIsExpanded) {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[self.collapsedHeaderView removeFromSuperview];
self.headerView.frame = self.expandedHeaderView.frame;
[self.headerView addSubview:self.expandedHeaderView];
self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y + offset, self.tableView.frame.size.width, self.tableView.frame.size.height - offset);
[UIView commitAnimations];
self.headerViewIsExpanded = YES;
}
正しくビューフレームを展開し、tableViewフレームを縮小します。しかし、元のUIControlの受け取り領域を拡大することができないため、元のフレームがどこにあるかを押すだけで折りたたむことができます。
この問題を解決するにはどうすればよいですか?
EDIT:または、私は問題を解決できない理由、または少なくとも安全に解決していない理由を説明した回答を受け入れます。
編集1:より明確にするため、headerView
は、tableView
ヘッダービューではありません。それはちょうどheaderView
と呼ばれることがあるテーブルの上に座っている単なるビューです。 headerView
とtableView
は、利用可能なウィンドウにまたがるメインUIView
のサブビューです。
なぜ「layoutSubviews」をオーバーライドする必要がありますか?これは動詞ではありませんか? –
このメソッドは、UIViewが ' - (void)layoutIfNeeded'を呼び出すときに呼び出されます。いくつかのイベント中にサブビューの位置を再定義します。例として、私はstandart textLabelを別のフレームのUITableViewセルに配置し、セル内にUITableViewを追加するためにこのメソッドを使用しています...しかし、tableView reloadDataの後にheightForHeaderInSectionメソッドを使用すると同じ効果が得られると思います。 – kokoko
私はそれをより明確にすべきでした... 'headerView'は' tableView'の外にあります。 'headerView'と呼ばれるようになった、普通の古い' UIControl'です。 tableViewには 'headerForSection:'は定義されていません。これは本当に 'UIControl'に関する単なる質問です。 –