私は UIScrollView を持っています (実際には UICollectionView ですが、おそらく問題ではありません)。IOS 7 で表示されると、ナビゲーション コントローラーはその contentInset と contentOffset を望ましくない値に設定します。ステータス バーとナビゲーション バーを調整しようとしているようです。私はそれが彼らを放っておくことを大いに望んでいます。contentInset と contentOffset の getter メソッドと setter メソッドをオーバーライドし、オブジェクトがセットを受け入れるかどうかをオブジェクトに伝えるフラグを付けて、これを修正しました。しかし、より良い方法はありますか?
7 に答える
self.automaticallyAdjustsScrollViewInsets = NO
メインのView Controllerで設定してみてください。
これは で導入されたiOS 7
ので、以下をサポートしている場合は、iOS バージョン チェックでラップすることをお勧めしiOS 6
ます。
アップデート
ストーリーボードを使用している場合は'Adjust Scroll View Insets'
、選択したコントローラーを確認するだけでなく、Interface Builder でこれを行うことができます。
viewController を閉じた後、tableView の contentOffset が (0, -64) に変更されました。
私の解決策は少し奇妙でした。他のすべての回答を試しましたが、成功しませんでした。問題を解決した唯一のことは、.xib のコントロール ツリーで tableView の位置を切り替えることでした。
次のような親ビューの最初のコントロールでした。
ImageViewの直後にtableViewを移動したところ、うまくいきました:
テーブルビューを最初の位置に配置すると問題が発生し、テーブルビューを別の位置に移動すると問題が解決したようです。
PD 私は autoLayout もストーリーボードも使用していません
これが誰かを助けることができることを願っています!
私には2つの解決策があります:
1.
self.view = scrollView;
2.
[self.navigationController.toolbar setTranslucent:NO];
私は同じ問題を抱えています。
設定
self.automaticallyAdjustsScrollViewInsets = NO
により、一部のビューで問題が解決しましたが、すべてではありませんでした。2 番目の解決策は、viewWillLayoutSubviews で tableview/view/scrollview のコンテンツ オフセットを設定することです。
- (void)viewWillLayoutSubviews { //Arrange the view CGRect tempViewFrame = self.view.frame; if (tempViewFrame.origin.y == 64.0f) { tempViewFrame.origin.y = 0; self.view.frame = tempViewFrame; } }
これにより、次の場合の両方のケースで問題が修正されます。
- ステータスバーの表示
ステータス バー + ナビゲーション バーの表示
override func viewDidLayoutSubviews() { NSLog("ORIGIN: \(self.view.frame.origin.y)") if self.view.frame.origin.y == 0 { if let rect = self.navigationController?.navigationBar.frame { let y = rect.size.height + rect.origin.y self.tableView.contentInset = UIEdgeInsetsMake(y, 0, 0, 0) } } else if self.view.frame.origin.y == 44 || self.view.frame.origin.y == 64 { self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0) } }