1

以前にUIScrollViewとページングを使用したプロジェクトを作成しましたが、この新しいプロジェクトでは、これに頭を悩ませていて、機能させることができません。AutoLayoutに問題がある可能性があると思います。最初は、すべての初期化をViewDidLoadではなくviewDidAppearで実行する必要があることに気付くまで、ページングモーションを機能させることさえできませんでした。

ページングのアクションが完了したので、subViewはロードされません!ストーリーボードで設定した現在のビューを邪魔にならないようにプッシュし、空白の背景を表示するだけです。

ここのコードは前のプロジェクトとほとんど同じですが、2番目のビュー(2ページ)を表示できないことに注意してください。

コードの一部を次に示します。

- (void)viewDidAppear:(BOOL)animated{
self.scrollView.delegate = self;
// view controllers are created lazily
// in the meantime, load the array with placeholders which will be replaced on demand
NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < kNumberOfPages; i++)
{
    [controllers addObject:[NSNull null]];
}
self.viewControllers = controllers;

// a page is the width of the scroll view
scrollView.pagingEnabled = YES;
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * kNumberOfPages, (scrollView.frame.size.height - 50));
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.scrollsToTop = NO;
scrollView.delegate = self;

pageControl.numberOfPages = kNumberOfPages;
pageControl.currentPage = 0;

// pages are created on demand
// load the visible page
// load the page on either side to avoid flashes when the user starts scrolling
//
[self loadScrollViewWithPage:1];
}




- (void)loadScrollViewWithPage:(int)page
{
if (page <= 0)
    return;
if (page >= kNumberOfPages)
    return;

PageOneViewController *controller = [viewControllers objectAtIndex:1];


if ((NSNull *)controller == [NSNull null])
{
    if(page == 1)
    {

        controller = [[PageOneViewController alloc] initWithRequestNumber: @"100" forID:self.idNumberFromLogin];
        [viewControllers replaceObjectAtIndex:page withObject:controller];
        CGRect frame = scrollView.frame;
        frame.origin.x = frame.size.width * 1;
        frame.origin.y = 0;
        controller.view.frame = frame;
        [scrollView addSubview:controller.view];
    }
}

}

PageOneViewController内

 - (id)initWithRequestNumber:(NSString *)requestID forID: (NSString *) employeeID
{

   if (self = [super initWithNibName:@"OpenRequestCommView" bundle:nil])
   {

   }

   return self;

}
4

3 に答える 3

2

ストーリーボードで自動レイアウトが有効になっている可能性があります。

ストーリーボードでファイルインスペクターを選択し、[自動レイアウトを使用]のチェックを外すと、自動レイアウトを無効にできます。

于 2012-11-16T01:11:27.490 に答える
0

このコードを.mに入れる必要があります

#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

このためにコードを更新します

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    if (IS_WIDESCREEN) {

        self.meuScroll.frame = CGRectMake(0, 0, 320, 468);

    } else {

        self.meuScroll.frame = CGRectMake(0, 0, 320, 380);

    }
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    if (IS_WIDESCREEN) {

        self.meuScroll.contentSize = CGSizeMake(320, 468);

    } else {

        self.meuScroll.contentSize = CGSizeMake(320, 380);

    }
}
于 2013-09-12T13:29:30.870 に答える
0

上記の質問のコードは、Appleが提供するUIScrollViewを使用してページングするためのサンプルコードに基づいています。私は自分のアプリケーションに同じコードを使用し、チュートリアル、スタックオーバーフローの質問、サンプルコードに何時間も費やしましたが、スクロールビューの自動レイアウトの問題を修正することはできませんでした。コントローラのビューとしてscrollViewを返すメソッドに1行のコードを追加するだけでよいことがわかりました。(これはサンプルコードのPhoneContentControllerクラスです)

- (UIView *)view
{
    [self.scrollView setTranslatesAutoresizingMaskIntoConstraints:YES];
    return self.scrollView;
}
于 2014-09-18T07:09:56.790 に答える