放入滚动视图时出现表格视图框架问题

Tableview frame issue when put in a scrollview

我想 post 一个 gif,但显然我没有足够的声誉。哦,好吧,随便吧;我正在使用 UIPageViewController,但出于某种原因,我决定通过使用 UIScrollView 并将 UITableViewControllers 的视图添加到相应的偏移量(页面)来使用更手动的解决方案。我在每个页面上有 4 个 UItableViewControllers(table 视图控制器的视图),所有这些都添加到容器视图控制器(具有 UIScrollView ) 作为子视图控制器。

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

所以,想问问以前是否有人遇到过类似的事情,或者知道如何摆脱它。我知道我可以随时使用图书馆,但我想学习。这是一些代码:

_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);

    }

}

我应该预先声明我没有完全理解你对

的描述

"table views began refusing to go all the way down and part of the final table view cell stays trimmed by the end of the screen when the scrolling ends."

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

我遇到了这个问题,部分表格视图被截断,我看不到大约 5 行底部。


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


要确定您的表格视图是否呈现良好,请在 XCode 中获取您的项目 运行,然后按下面的按钮

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

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