3

Я пытаюсь открыть новое представление о выборе ячейки таблицы в предыдущем представлении. Новое представление, которое я пытаюсь открыть, состоит из разных подзадач или модулей. Следовательно, я заполняю каждый под-просмотр один за другим внутри в методе [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.

+0

Прежде всего, вам нужно вызвать super in viewDidLoad(): [super viewDidLoad]; – onnoweb

+0

Я думаю, вы не используете UITableView. Кажется, вы просто используете UIScrollView, верно? В этом случае, если вы установите правильные ограничения, тогда не нужно будет внедрять 'computeAndFixHeight'. Проверьте это видео, чтобы убедиться, что вы правильно установили свои ограничения: https://www.youtube.com/watch?v=4oCWxHLBQ-A – ghashi

+0

Я бы переместил ваш [self populate]; метод для просмотраWillAppear –

ответ

0

Я создал этот проект как раз для вашего вопроса, чтобы показать, как обновить Scrollview просто используя AutoLayout (нет необходимости переопределить viewWillLayoutSubviews, обновите scrollView's contentSize, вызовите layoutIfNeeded или updateConstraints)

Надеется, что это поможет вам =)

https://github.com/ghashi/ScrollViewQuestion/tree/master

Это результат:

shopping_list1

+0

@ gashi ... Спасибо, что протянула руку помощи.Я определенно дам вам попытку и вернусь к вам как можно скорее. – Ron

0

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

В итоге мы создаем подкласс UIView, который теперь управляется для нас. Мы назвали это NNVerticalStackView.h,.m.

+0

Спасибо за обновление. Я запомню это и буду держать вас в курсе, как только я это сделаю. Еще раз спасибо. – Ron

Смежные вопросы