首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIViewControllers in ContentView of UIScrollView?

UIViewControllers in ContentView of UIScrollView?
EN

Stack Overflow用户
提问于 2016-03-07 11:29:08
回答 2查看 159关注 0票数 0

我不想使用页面控件,因为当用户水平滚动时,我必须更改按钮。

所以我使用的是UIScrollview和容器视图。

通过遵循本教程,我可以在容器视图中添加子视图控制器,但是滚动视图不具有自动布局。

这是我的密码

代码语言:javascript
复制
- (void)viewDidLoad {
[super viewDidLoad];

self.array_pageContent = [[NSMutableArray alloc] init];

CallViewController *objGameReviewPageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CallViewController"];
[self addChildViewController:objGameReviewPageContentViewController];
UIView * view = objGameReviewPageContentViewController.view;




HomeViewController *objHomeViewController= [self.storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"];
[self addChildViewController:objHomeViewController];
UIView * view1 = objHomeViewController.view;





GroupViewController *objGroupViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"GroupViewController"];
[self addChildViewController:objGroupViewController];
UIView * view2 = objGroupViewController.view;




CallenderViewController *objCallenderViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CallenderViewController"];
[self addChildViewController:objCallenderViewController];
UIView * view3 = objGroupViewController.view;




CasesViewController *objCasesViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CasesViewController"];
[self addChildViewController:objCasesViewController];
UIView * view4 = objGroupViewController.view;




[self.scrollViewContent setPagingEnabled:YES];
[self.scrollViewContent setScrollEnabled:YES];
[self.scrollViewContent setShowsHorizontalScrollIndicator:YES];
[self.scrollViewContent setShowsVerticalScrollIndicator:NO];
[self.scrollViewContent setDelegate:self];




    [self.array_pageContent addObject:view];
    [self.array_pageContent addObject:view1];
    [self.array_pageContent addObject:view2];
    [self.array_pageContent addObject:view3];
    [self.array_pageContent addObject:view4];


NSInteger pageCount = self.array_pageContent.count;

self.pageControl.currentPage = 0;
self.pageControl.numberOfPages = pageCount;

self.mutableArray_pageContentViews = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < pageCount; ++i) {
    [self.mutableArray_pageContentViews addObject:[NSNull null]];
}

}

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

CGSize pagesScrollViewSize = self.scrollViewContent.frame.size;
self.scrollViewContent.contentSize = CGSizeMake(pagesScrollViewSize.width * self.array_pageContent.count, pagesScrollViewSize.height);

[self loadVisiblePages];
}

- (void)loadPage:(NSInteger)page {
if (page < 0 || page >= self.array_pageContent.count) {
    return;
}



UIView *pageView = [self.mutableArray_pageContentViews objectAtIndex:page];
if ((NSNull*)pageView == [NSNull null]) {
    CGRect frame = self.scrollViewContent.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0.0f;

    UIView *newPageView = nil;
    newPageView = [self.array_pageContent objectAtIndex:page];

    newPageView.frame = frame;
    [self.scrollViewContent addSubview:newPageView];
    [self.mutableArray_pageContentViews replaceObjectAtIndex:page withObject:newPageView];
}
}

- (void)purgePage:(NSInteger)page {
if (page < 0 || page >= self.array_pageContent.count) {
    return;
}

UIView *pageView = [self.mutableArray_pageContentViews objectAtIndex:page];
if ((NSNull*)pageView != [NSNull null]) {
    [pageView removeFromSuperview];
    [self.mutableArray_pageContentViews replaceObjectAtIndex:page withObject:[NSNull null]];
}
}

- (void)loadVisiblePages {
CGFloat pageWidth = self.scrollViewContent.frame.size.width;
NSInteger page = (NSInteger)floor((self.scrollViewContent.contentOffset.x * 2.0f + pageWidth) / (pageWidth * 2.0f));

self.pageControl.currentPage = page;

NSInteger firstPage = page - 1;
NSInteger lastPage = page + 1;

for (NSInteger i=0; i<firstPage; i++) {
    [self purgePage:i];
}

for (NSInteger i=firstPage; i<=lastPage; i++) {
    [self loadPage:i];
}

for (NSInteger i=lastPage+1; i<self.array_pageContent.count; i++) {
    [self purgePage:i];
}
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
[self loadVisiblePages];
}

故事板的层次结构是

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-07 12:13:42

从视图层次结构中删除容器视图,您的滚动将工作。

并从下面的代码复制您的viewDidLoad() metod。

代码语言:javascript
复制
- (void)viewDidLoad {
    [super viewDidLoad];

    CGFloat width = 0.0;

    self.array_pageContent = [[NSMutableArray alloc] init];

    CallViewController *objGameReviewPageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CallViewController"];
    [self addChildViewController:objGameReviewPageContentViewController];
    width = objGameReviewPageContentViewController.view.frame.size.width;
    [self.scrollViewContent addSubview:objGameReviewPageContentViewController.view];

//    UIView * view = objGameReviewPageContentViewController.view;




    HomeViewController *objHomeViewController= [self.storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"];

    CGRect frame = objHomeViewController.view.frame;
    frame.origin.x = objGameReviewPageContentViewController.view.frame.size.width;
    objHomeViewController.view.frame = frame;
    width += frame.size.width;

    NSLog(@"%f",width);

    [self addChildViewController:objHomeViewController];
    [self.scrollViewContent addSubview:objHomeViewController.view];
//    UIView * view1 = objHomeViewController.view;





    GroupViewController *objGroupViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"GroupViewController"];

    frame = objGroupViewController.view.frame;
    frame.origin.x = objGameReviewPageContentViewController.view.frame.size.width*2;
    objGroupViewController.view.frame = frame;
    width += frame.size.width;

    NSLog(@"%f",width);

    [self addChildViewController:objGroupViewController];
    [self.scrollViewContent addSubview:objGroupViewController.view];
//    [self addChildViewController:objGroupViewController];
//    UIView * view2 = objGroupViewController.view;




    CallenderViewController *objCallenderViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CallenderViewController"];

    frame = objCallenderViewController.view.frame;
    frame.origin.x = objGameReviewPageContentViewController.view.frame.size.width*3;
    objCallenderViewController.view.frame = frame;
    width += frame.size.width;

    NSLog(@"%f",width);

    [self addChildViewController:objCallenderViewController];
    [self.scrollViewContent addSubview:objCallenderViewController.view];

//    [self addChildViewController:objCallenderViewController];
//    UIView * view3 = objGroupViewController.view;




    CasesViewController *objCasesViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CasesViewController"];

    frame = objCasesViewController.view.frame;
    frame.origin.x = objGameReviewPageContentViewController.view.frame.size.width*4;
    objCasesViewController.view.frame = frame;
    width += frame.size.width;

    NSLog(@"%f",width);

    [self addChildViewController:objCasesViewController];
    [self.scrollViewContent addSubview:objCasesViewController.view];

//    [self addChildViewController:objCasesViewController];
//    UIView * view4 = objGroupViewController.view;




    [self.scrollViewContent setPagingEnabled:YES];
    [self.scrollViewContent setScrollEnabled:YES];
    [self.scrollViewContent setShowsHorizontalScrollIndicator:YES];
    [self.scrollViewContent setShowsVerticalScrollIndicator:NO];
    [self.scrollViewContent setDelegate:self];

    self.scrollViewContent.contentSize = CGSizeMake(width, self.scrollViewContent.frame.size.height);




//        [self.array_pageContent addObject:view];
//        [self.array_pageContent addObject:view1];
//        [self.array_pageContent addObject:view2];
//        [self.array_pageContent addObject:view3];
//        [self.array_pageContent addObject:view4];


//    NSInteger pageCount = self.array_pageContent.count;
//    
//    self.pageControl.currentPage = 0;
//    self.pageControl.numberOfPages = pageCount;
//    
//    self.mutableArray_pageContentViews = [[NSMutableArray alloc] init];
//    for (NSInteger i = 0; i < pageCount; ++i) {
//        [self.mutableArray_pageContentViews addObject:[NSNull null]];
//    }

}
票数 2
EN

Stack Overflow用户

发布于 2016-03-07 11:39:50

请按照下面的链接。这会解决你的问题。此外,请不要编写太多的代码,它将很容易完成与故事板。

https://github.com/mluton/EmbeddedSwapping

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35842543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档