0

アップデート

以下のコードは実際には問題ではないことがわかります。私のアプリデリゲートでは、次のことを行っています。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] init];

    self.window.rootViewController = self.viewController;// <-- this does not work
    //[self.window addSubview:self.viewController.view]; // <-- this works

    [self.window makeKeyAndVisible];
    return YES;
}

「self.window.rootViewController=self.viewController」というステートメントを削除し、viewControllerのビューをウィンドウに追加するだけで機能します。誰かがこれを説明できますか?ウィンドウにrootViewControllerを設定すると、子の境界が制限されますか?私はドキュメントを調べようとしましたが、これについてはあまり言及されていません。

元の投稿

UIScrollViewのページにパディングを追加するのに問題があります。私は基本的に、事前定義されたパディング(写真のないPhotosアプリのようなもの)で区切られたさまざまなページのUIViewを表示する単純なスクロールビューを設定しようとしています。私はWWDC2010のAppleのScrollViewの例とそのサンプルアプリPhotoScrollerに従おうとしていますが、常にビューにパディングが表示されます。アプリは現在、ステータスバーを非表示にし、ウィンドウに1つのViewControllerを追加します。簡単にするために、各ページには緑色のUIViewが表示され、パディングがあるスペースは黄色になっている必要があります。ユーザーがスクロールしているときにのみ黄色が表示されます。最初の3ページは次のとおりです。

1、2、3ページ

.hファイルで宣言されたpagingScrollViewと呼ばれる単一のクラスレベルのフィールドがあります。私のシングルビューコントローラーでは、基本的にサンプルコードの動作を追跡しようとしています。

#define PADDING  10
#define PAGE_COUNT 3

- (void)loadView
{
    CGRect pagingScrollFrame = [[UIScreen mainScreen] bounds];
    pagingScrollFrame.origin.x -= PADDING;
    pagingScrollFrame.size.width += (2 * PADDING);
    pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingScrollFrame];

    pagingScrollView.pagingEnabled = YES;
    pagingScrollView.backgroundColor = [UIColor yellowColor];
    pagingScrollView.contentSize = CGSizeMake(pagingScrollFrame.size.width * PAGE_COUNT, pagingScrollFrame.size.height);

    self.view = pagingScrollView;

    for(int i = 0; i < PAGE_COUNT; i++) {
        CGRect frame = [self frameForPageAtIndex:i];
        UIView *page = [[UIView alloc] initWithFrame:frame];
        page.backgroundColor = [UIColor greenColor];
        [pagingScrollView addSubview:page];
    }
}

- (CGRect)frameForPageAtIndex:(NSUInteger)index {
    CGRect bounds = pagingScrollView.bounds;
    CGRect pageFrame = bounds;

    pageFrame.size.width -= (2 * PADDING);
    pageFrame.origin.x = (bounds.size.width * index) + PADDING;

    return pageFrame;
}

pagingScrollFrameの幅は340なので、(私が思ったように)スクロールビューは340ピクセルのページに分割されます。私は何が欠けていますか?

4

2 に答える 2

1

これを非常に簡単に見ると、コンテンツサイズの設定を除いて、かなり正しいことをしているように見えます。あなたが設定した:

pagingScrollView.contentSize = CGSizeMake(pagingScrollFrame.size.width * PAGE_COUNT, pagingScrollFrame.size.height);

これは、各ページが本当に隣り合っている場合は正しいでしょうが、各ビューの間に10ポイントのパッドを追加するので、次のようになります。

pagingScrollView.contentSize = CGSizeMake(pagingScrollFrame.size.width * PAGE_COUNT + PADDING * (PAGE_COUNT - 1), pagingScrollFrame.size.height);

これにより、問題が修正され、黄色が表示領域に表示されなくなります。

于 2012-06-05T03:14:28.073 に答える
0

ページングがオフになっている理由は、ウィンドウに RootViewController を設定すると、明らかに舞台裏で何かが行われているためです (それが何であるかはわかりません)。修正するには、ウィンドウにビューを追加する古い方法を使用します。

[self.window addSubview:self.viewController.view];

RootViewController の設定中に修正する方法を知っていると思われる場合は、お知らせください。

于 2012-06-13T02:28:52.997 に答える