Проблема с рамкой табличного представления при просмотре прокрутки

Я хотел опубликовать GIF, но, видимо, мне не хватает репутации. Ну да ладно, что угодно; Я использовал UIPageViewController, но по какой-то причине я решил пойти с более ручным решением, используя UIScrollView и добавив представления UITableViewControlllers к соответствующим смещениям (страницам). У меня есть 4 UItableViewControllers на каждой странице (представления контроллеров табличного представления), и все они добавляются в контроллер представления контейнера (который имеет 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);

    }

}

2 ответа

Решение

Я понял. Проблема заключалась в том, что когда я добавил представления контроллеров представления в представление прокрутки, они возвращали размеры, как если бы не было навигационной панели. Но они все еще были расположены под панелью навигации, что привело к тому, что общий вид имел на 64 пункта больше высоты, чем мог показывать экран. когда я вручную вычел 64 pt из просмотров, и это было исправлено. Но так как это очень грубый способ сделать это, я попытался исправить это, возившись с автоматическим макетом, что в итоге получилось хорошо.

Я должен заявить заранее, что я не совсем понял ваше описание

msgstr "табличные представления начали отказываться идти полностью вниз, и часть окончательной ячейки табличного представления остается урезанной к концу экрана, когда прокрутка заканчивается".

Мой ответ основан на проблеме, с которой я столкнулся раньше. Моя установка - это удобный вид в представлении контейнера раскадровки (без родительского просмотра прокрутки)

Я столкнулся с этой проблемой, когда часть табличного представления была обрезана, и я не мог видеть около 5 нижних рядов.


Оказывается, у меня не было никаких ограничений между родительским контейнерным представлением и табличным представлением.


Чтобы определить, хорошо ли рендерится ваши таблицы, запустите ваш проект в XCode и затем нажмите на кнопку ниже Визуальный стек ваших просмотров

Эта кнопка затем приостановит ваше приложение и предоставит вам визуальный набор различных представлений, которые в данный момент отображаются в вашем приложении. Затем вы можете увидеть, отображается ли какой-либо из дочерних элементов (в вашем случае таблиц) вне рамок родительского представления, и в этом случае эта часть не будет видна. Это указывает на то, что у вас нет ограничений (или) текущие ограничения у вас неверны.

Другие вопросы по тегам