Я пытаюсь открыть новое представление о выборе ячейки таблицы в предыдущем представлении. Новое представление, которое я пытаюсь открыть, состоит из разных подзадач или модулей. Следовательно, я заполняю каждый под-просмотр один за другим внутри в методе [self populate]
, который запускается внутри метода viewDidLoad
.UIScrollView не обновляется должным образом, показывает пустой просмотр случайно
-(void)viewDidLoad{
[super viewDidLoad];
[self populate];
}
-(void) populate{
[self.edgeGallery loadImagesWithURLs: _items];
// Modular view: main info
[self.vwListingMainView setListing: _listing];
[self.vwListingMainView refresh];
// Modular view: listing agents
_vwListingAgentsView.agentsArray = _listing.agents;
// Modular view: listing info
_vwListingInfoView.listing = _listing;
[_vwListingInfoView refresh];
// Modular view: Listing activities
_vwListingActivityView.listing = _listing;
[_vwListingActivityView requestCounts];
}
Каждый раз, когда новый подтаблицы заполняется, метод viewWillLayoutSubViews
называется. Это метод, в котором я вычисляю высоту и другие ограничения subview и добавляю их в супервизор.
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
[self computeAndFixHeight];
}
- (void) computeAndFixHeight {
// Adjusting each module's height
_cstMainInfoHeight.constant = [_vwListingMainView getViewHeight];
_cstListingActionsHeight.constant = [_vwListingActionsView getViewHeight];
_cstListingAgentsHeight.constant = [_vwListingAgentsView getViewHeight];
_cstListingInfoViewHeight.constant = [_vwListingInfoView getViewHeight];
// Adjusting scroll view height
NSInteger computedScrollHeight = _vwListingUpcomingEventView.frame.origin.y + [_vwListingUpcomingEventView getViewHeight];
[self.scrollView setContentSize:CGSizeMake(self.view.frame.size.width, computedScrollHeight)];
_cstContainerBottom.constant = -computedScrollHeight - kDefaultNegativeScrollH;
[self.view layoutIfNeeded];
[self.view updateConstraints];
}
Однако, как только вид загружен полностью, проблема, что я столкнулся в том, что иногда, я получаю полное представление, а иногда, случайно, я получаю пустой вид. Я думаю, [self.view layoutIfNeeded]
проблема, но я также пробовал использовать [self.view setNeedsLayout]
и [self.view setNeedsUpdateConstraints]
, но проблема остается. Любая помощь будет оценена по достоинству.
Прошу извинить меня, если я делаю что-то глупое. Я новичок в разработке iOS.
Прежде всего, вам нужно вызвать super in viewDidLoad(): [super viewDidLoad]; – onnoweb
Я думаю, вы не используете UITableView. Кажется, вы просто используете UIScrollView, верно? В этом случае, если вы установите правильные ограничения, тогда не нужно будет внедрять 'computeAndFixHeight'. Проверьте это видео, чтобы убедиться, что вы правильно установили свои ограничения: https://www.youtube.com/watch?v=4oCWxHLBQ-A – ghashi
Я бы переместил ваш [self populate]; метод для просмотраWillAppear –