69

私は UIScrollView を持っています (実際には UICollectionView ですが、おそらく問題ではありません)。IOS 7 で表示されると、ナビゲーション コントローラーはその contentInset と contentOffset を望ましくない値に設定します。ステータス バーとナビゲーション バーを調整しようとしているようです。私はそれが彼らを放っておくことを大いに望んでいます。contentInset と contentOffset の getter メソッドと setter メソッドをオーバーライドし、オブジェクトがセットを受け入れるかどうかをオブジェクトに伝えるフラグを付けて、これを修正しました。しかし、より良い方法はありますか?

4

7 に答える 7

208

self.automaticallyAdjustsScrollViewInsets = NOメインのView Controllerで設定してみてください。

これは で導入されたiOS 7ので、以下をサポートしている場合は、iOS バージョン チェックでラップすることをお勧めしiOS 6ます。


アップデート

ストーリーボードを使用している場合は'Adjust Scroll View Insets'、選択したコントローラーを確認するだけでなく、Interface Builder でこれを行うことができます。

ここに画像の説明を入力

于 2013-09-20T19:31:58.817 に答える
25

viewController を閉じた後、tableView の contentOffset が (0, -64) に変更されました。

私の解決策は少し奇妙でした。他のすべての回答を試しましたが、成功しませんでした。問題を解決した唯一のことは、.xib のコントロール ツリーで tableView の位置を切り替えることでした。

次のような親ビューの最初のコントロールでした。

前

ImageViewの直後にtableViewを移動したところ、うまくいきました:

後

テーブルビューを最初の位置に配置すると問題が発生し、テーブルビューを別の位置に移動すると問題が解決したようです。

PD 私は autoLayout もストーリーボードも使用していません

これが誰かを助けることができることを願っています!

于 2014-04-11T19:33:26.287 に答える
5

私には2つの解決策があります:

1.

self.view = scrollView;

2.

[self.navigationController.toolbar setTranslucent:NO];
于 2015-01-27T08:19:14.937 に答える
2

私は同じ問題を抱えています。

  1. 設定self.automaticallyAdjustsScrollViewInsets = NOにより、一部のビューで問題が解決しましたが、すべてではありませんでした。

  2. 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;
        }
    }
    
于 2016-06-22T10:54:53.383 に答える
0

これにより、次の場合の両方のケースで問題が修正されます。

  1. ステータスバーの表示
  2. ステータス バー + ナビゲーション バーの表示

    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)
        }
    }
    
于 2016-07-04T18:34:48.900 に答える