Objective c XCode-UIScrollView分页不显示子视图(自动布局?)

Objective c XCode-UIScrollView分页不显示子视图(自动布局?),objective-c,ios,xcode,uiscrollview,autolayout,Objective C,Ios,Xcode,Uiscrollview,Autolayout,我以前做过一个使用UIScrollView进行分页的项目,但在这个新项目中,我一直在为这个问题绞尽脑汁,无法让它工作。我认为问题可能在于自动布局。起初,我甚至无法让分页动作正常工作,直到我意识到所有的初始化都必须在ViewDidDisplay而不是ViewDidLoad中完成 现在我已经完成了分页操作,子视图就不会加载了!它只会推动我在故事板中设置的当前视图,只显示空白背景。 请注意,这里的代码与我以前的项目几乎相同,但我无法显示第二个视图(第2页) 下面是一些代码: - (void)viewD

我以前做过一个使用UIScrollView进行分页的项目,但在这个新项目中,我一直在为这个问题绞尽脑汁,无法让它工作。我认为问题可能在于自动布局。起初,我甚至无法让分页动作正常工作,直到我意识到所有的初始化都必须在ViewDidDisplay而不是ViewDidLoad中完成

现在我已经完成了分页操作,子视图就不会加载了!它只会推动我在故事板中设置的当前视图,只显示空白背景。

请注意,这里的代码与我以前的项目几乎相同,但我无法显示第二个视图(第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];
    }
}

}

您可能在故事板上启用了自动布局


您可以通过在情节提要中选择文件检查器并取消选中“使用自动布局”来禁用自动布局。

您需要将此代码放在.m中

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

上面问题中的代码是基于使用Apple提供的UIScrollView进行分页的示例代码构建的。我在我的应用程序中使用了相同的代码,花了数小时阅读教程、堆栈溢出问题和示例代码,但没有任何东西可以通过其scrollview解决自动布局问题。事实证明,您只需要在返回scrollView作为控制器视图的方法中添加一行代码。(这是示例代码中的PhoneContentController类)


在这种情况下是否可以使用autolayout?让我们同意autolayout用于控制视图布局的大小/位置。Autolayout可以节省大量时间和代码行来调整纵向和横向的控件(按钮、标签、子视图)。现在,我不确定Alan的案例是否适合使用autolayout。你能用autolayout解决这个问题吗?
#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);

    }
}
- (UIView *)view
{
    [self.scrollView setTranslatesAutoresizingMaskIntoConstraints:YES];
    return self.scrollView;
}