放入scrollview时的Tableview框架问题

时间:2015-08-18 15:57:26

标签: ios objective-c uitableview uiscrollview contentsize

我想发布一个GIF,但显然我没有足够的声誉。哦,好吧,无论如何;我使用的是UIPageViewController,但出于某种原因,我决定使用UIScrollView并将UITableViewControlllers的视图添加到相应的偏移量(页面),以获得更加手动的解决方案。我在每个页面上有4个UItableViewControllers(表视图控制器的视图),所有这些都被添加到容器视图控制器(具有UIScrollView)作为子视图控制器。

实际问题是当我进行切换时,表格视图开始拒绝一直向下,并且当滚动结束时,最终表格视图单元格的一部分在屏幕末端保持修剪。

enter image description here

所以,想知道是否有人在知道如何摆脱这个之前就遇到过这样的事情。我知道我总是可以使用图书馆,但我想学习。这是一些代码:

_containerScrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
_containerScrollView.contentSize = CGSizeMake(_containerScrollView.frame.size.width * 4, 0.0f);
_containerScrollView.pagingEnabled = YES;

[self.view addSubview:_containerScrollView];

UITableViewController *vc1 = [[UIViewController alloc] init];
UITableViewController *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"trendingViewController"];
UITableViewController *vc3 = [self.storyboard instantiateViewControllerWithIdentifier:@"placesViewController"];
UITableViewController *vc4 = [self.storyboard instantiateViewControllerWithIdentifier:@"favoritesViewController"];

self.rallyViewControllers = [NSArray vc1, vc2, vc3, vc4, nil];

[self addViewControllers];

其他方法;

- (void)addViewControllers{

     if (self.rallyViewControllers == nil) {

        return;

     }

     for (int i = 0; i < [self.rallyViewControllers count]; i++) {

         UIViewController* viewController = [self.rallyViewControllers objectAtIndex:i];

         [self addChildViewController:viewController];
         [viewController didMoveToParentViewController:self];

         [_containerScrollView addSubview:viewController.view];

     }

}

这在viewDidLayoutSubviews

中调用
- (void)configureFrames{

    if (self.rallyViewControllers == nil) {

    return;

    }

    CGFloat width = _containerScrollView.frame.size.width;
    CGFloat height = _containerScrollView.frame.size.height;

    for (int i = 0; i < [self.rallyViewControllers count]; i++) {

        UIViewController *viewController = [self.rallyViewControllers objectAtIndex:i];
        viewController.view.frame = CGRectMake(i * width, 0.0f, width, height);

    }

}

2 个答案:

答案 0 :(得分:1)

我应该事先声明我并不完全理解你对

的描述
  

&#34;表格视图开始拒绝完全拒绝并且部分内容   最终表格视图单元格在屏幕末端保持修剪状态   滚动结束。&#34;

我的回答是基于我之前遇到的一个问题。我的设置是故事板容器视图中的uitableview(没有任何父滚动视图)

我遇到了这个问题,其中部分桌面视图被切断,我看不到大约5个底行。

原来我在父容器视图和tableview之间没有任何约束设置。

要确定您的tableviews是否正常渲染,请让您的项目在XCode中运行,然后按下面的按钮 Visual stack of your views

此按钮将暂停您的应用,并为您提供当前在您的应用中呈现的不同视图的可视堆栈。然后,您可以查看是否有任何子项(在您的案例中是表格视图)呈现在父视图的框架之外,在这种情况下该部分将不可见。这表明您没有约束(或)您当前的约束不正确。

答案 1 :(得分:0)

我明白了。问题是当我将视图控制器视图添加到滚动视图时,它们返回的尺寸就像没有导航栏一样。但它们仍位于导航栏下方,导致总视图的高度比屏幕显示的高64个。当我手动从视图中减去64磅时,它被修复了。但是,由于这是一种非常粗暴的方式,我试图通过摆弄自动布局来解决这个问题,结果很好。