2

UIView を含む UIScrollView があり、その中に UIImageView といくつかの UIButtons があります。私が抱えている問題は、画像がナビゲーション バーの下に約 20 ピクセル表示されることです。

同様の問題を抱えていると思われる人々は、設定のような解決策を持っていました

self.automaticallyAdjustsScrollViewInsets = NO;

または単にステータスバーを非表示にします

- (BOOL)prefersStatusBarHidden {
    return YES;
}

ただし、両方のソリューションは私にはうまくいきません。最初のものはコンテンツを高く設定しすぎて、代わりに下部に 20 ピクセルのスペースを追加します。2 つ目はステータス バーを非表示にしますが、オフセットは残ります。

問題

Ray Wenderlichによるこのチュートリアルのコードがたくさんあり、コードのどこに問題があるのか​​ 正確にわからないため、これは github のコードへのリンクです。

誰でも私を助けることができますか?

4

2 に答える 2

1

何が起こっているのかを理解することができました。アプリへのリンクを投稿していただきありがとうございます。

問題は次のコードです。

if (contentsFrame.size.height < boundsSize.height) {
    contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f;
} else {
    contentsFrame.origin.y = 0.0f;
}

実際には、マップが最初に表示されたときcontentsFrame.size.heightよりも小さいことがわかります。bounds.Size.heightしたがって、コードは画像を垂直方向に中央揃えしています。そのため、上部にオフセットが表示されます。正確には 17.279 ピクセルです。

私はあなたのアプリをいじっていましたが(これは非常に興味深いようです)、2つの呼び出しをcenterScrollViewContents完全に取り除くことができ、期待どおりに機能すると思います。

ご不明な点がございましたら、お気軽にお問い合わせください。

お役に立てれば!

于 2013-11-14T00:31:13.187 に答える
0

正しい解決策は@LuisCienからのものです

MPMediaPickerController で UIScrollView を使用するときに役立つことがわかったことをここに追加します。

- (void)fixViewFrameBoundSize {
     CGRect contentsFrame = self.view.frame;
     CGSize boundsSize = self.view.bounds.size;
     if (contentsFrame.size.height < boundsSize.height) {
         contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f;
     } else {
         contentsFrame.origin.y = 0.0f;
     }
     [self.view setFrame:contentsFrame];
}

- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker {
[self dismissViewControllerAnimated:YES completion:^{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self fixViewFrameBoundSize];
    });
}];

}

選択した項目のコールバックについても同じです:

[self dismissViewControllerAnimated:YES
                         completion:^{

                             //LP : get item url and play

                             dispatch_async(dispatch_get_main_queue(), ^{
                                 [self fixViewFrameBoundSize];
                             });

                             MPMediaItem *item = [collection representativeItem];

このソリューションは、UIView を持つ XIB があり、それを次のように UISCrollView に変換する場合にうまく機能します。

- (void)scrollViewMakeScrollable {
       CGSize scrollableSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height+44.0);
       [((UIScrollView*)self.view) setContentSize:scrollableSize];
       [((UIScrollView*)self.view) setAlwaysBounceHorizontal:NO];
       [((UIScrollView*)self.view) setAlwaysBounceVertical:NO];
       self.automaticallyAdjustsScrollViewInsets = NO;

}

通常、あなたがやっているとき

- (void) viewDidLoad {

     [super viewDidLoad];

      [self scrollViewMakeScrollable];
于 2015-05-12T14:46:25.650 に答える