5

編集: これはフレームの問題ではありません。フレームは正しい位置にあります。オフになっている内容です。はい、クリアステータスバーを補っています。ViewDidLoad は、コンテンツ オフセットが 0,0 であることを示しています。

スクロールビューを持つアプリケーションのすべてのページで、コンテンツが 20 ピクセル押し下げられます。新しいステータスバー、またはその欠如と関係があるのではないかと思います。このバグは、シミュレーターの設定メニューにも存在するようです。以下のスクリーンショット。これは、ViewController に追加された最初のスクロール ビューにのみ影響し、他のビューが追加されていない場合にのみ影響するようです。Table ビューも Scroll ビューを継承しているため、影響を受けています。明確にするために、スクロールビューは正しい原点から始まりますが、コンテンツは 20 ピクセル押し下げられます。これは奇妙です。なぜなら、これがステータス バーの問題であれば、下ではなく 20 ピクセル上になると思うからです。

現在、これをベースビューコントローラーに追加することで修正しています

UIView *hackView = [[UIView alloc] init];
hackView.frame = CGRectMake(0, 0, 0, 0);
[self.view addSubview:hackView];

明らかに、これはハックです。

最新の IOS7 向けにビルドする場合、IOS7 のゴールド メンバー バージョンでも、電話とシミュレーターで同じことが起こっています。シミュレーターの設定テーブルビューと以下のテーブルビューでバグの例を確認することもできます。

ここに画像の説明を入力

IOS7 の設定

ロード直後のスクリーンショットです。私たちが気付いた奇妙なことの 1 つは、プルを実行して更新すると、スクロールビューが修正され、正しい位置に静止することです。または、補正すると、最初は正しく見えますが、その後のリフレッシュへのプルにより、スクロールビューが -20px に移行されます。

4

4 に答える 4

3

影響を受けたUIViewControllersにこれを追加しviewDidLoad:、問題を修正しました:

NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"7.0" options: NSNumericSearch];
if (order == NSOrderedSame || order == NSOrderedDescending)
{
    // OS version >= 7.0
    self.edgesForExtendedLayout = UIRectEdgeNone;
}

別のよりクリーンな方法:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;
于 2013-09-27T18:08:05.530 に答える
2

自分の意見をどのように展開していますか?autolayout を使用するとtopLayoutGuide、これらのオフセットに対応できる を使用できます。

于 2013-09-13T22:14:57.623 に答える
0

Ios 7 では、ビューは y= 0 のウィンドウから始まります。ビューを 20 ピクセルに移動します。

self.view.frame = CGRectmake (0,20,320,hight);

これは、iOS 7 の透明なステータス バーによるものです。

ビューをプルダウンして正しく表示します。

于 2013-09-13T22:16:59.093 に答える