1

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

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

在此处输入图像描述

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

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

    }

}
4

2 回答 2

1

我应该提前声明,我没有完全理解你的描述

“表格视图开始拒绝一直向下移动,当滚动结束时,最终表格视图单元格的一部分在屏幕末端保持修剪。”

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

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


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


要确定您的表格视图是否渲染良好,请让您的项目在 XCode 中运行,然后按下下面的按钮 您的视图的视觉堆栈

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

于 2015-08-18T16:44:23.223 回答
0

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

于 2015-08-22T10:52:58.587 回答