私はほぼ同じ問題に遭遇しました.CodaFiのソリューションは私の問題を解決できません. したがって、この解決策が正しい答えであるとは思えません。
私の状況と問題の説明は次のとおりです。UINavigationBar を ContentInset 領域に追加し、UIWebView を UIScrollView の ContentSize 領域に追加して、UINavigationBar が画面の上部の外にある Web コンテンツと一緒にスクロールダウンできるようにします。また、UINavigationBar 内にも、1 つの UITextField と 1 つの UISearchBar を追加しました (はい、Safari と同じです)。コードの設定の一部に続きます(viewDidLoad:メソッド内):
navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, -64, 320, 64);
textfield = [[UITextField alloc] initWithFrame:CGRectMake(5, 23, 150, 30)];
[navigationBar addSubview:textfield];
searchbar = [[UISearchBar alloc] initWithFrame:CGRectMake(200, 23, 100, 30)];
[navigationBar addSubview:searchbar];
[self.webView.scrollView setContentInset:UIEdgeInsetsMake(64, 0, 0, 0)];
[self.webView.scrollView setContentOffset:CGPointMake(0, -64) animated:NO];
[self.webView.scrollView addSubview:navigationBar];
問題は、テキストフィールドまたは検索バーをクリックすると、ナビゲーションバー (実際にはビュー全体) が画面に表示されることです: テキストフィールドが 41 ポイント、検索バーが 42 ポイント (変です!)。そのため、画面の上部に 0 ~ 41 (または 42) ポイントの不思議な空白が残ります。そしてもう1つの奇妙なことは、それが一度しか起こらないということです! 画面を指でスクロールした後、テキストフィールドまたは検索バーをクリックすると、画面が消えて二度と表示されません。私の問題の本質は、デニスの問題と同じだと思います。
Web で 2 日間検索した後、残念ながら、この問題の本質を解決するための完璧な解決策を見つけることができませんでした (実際、問題の本質についてはよくわかりません...)。
しかし、私が実験して観察したように、テキストフィールドが下に移動した41ポイントは、ナビゲーションバーに設定されている相対位置(-64 + 23 = -41)が原因である可能性があると思います。そして、ユーザーがクリックすると、システム(iOS)がその位置をチェックし(viewDidLoadで-64でcontentOffsetを設定しましたが)、ユーザーの範囲内にないことを確認し、スクロールビューを強制的に下にスクロールさせますそれは現れます(下向きに41ポイント)。私たち(開発者)がコンテンツインセット領域を設定してそれを操作すると、スクロールビューの動作が理解できません。それについて話している文書や参考文献は本当にほとんどありません。私の仮定が間違っていて、誰かが将来私を訂正して、真実を見つけるのを手伝ってくれたらいいのにと思います.
最後に、「本当の」答えを見つけることはできませんでしたが、実際にこの問題の解決策を見つけました (症状を治すための救済策のように)。コードは次のとおりです。
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.y < -64) { // if it is beyond the contentInset area
if (!scrollView.dragging && !scrollView.decelerating) { // scrollView is operated by system
[scrollView setContentOffset:CGPointMake(0, -64) animated:NO]; // freeze the screen at (0, -64) position
}
}
}