2016-05-11 2 views
0

Внутри viewDidLoad моего UIViewController Я творю:не удается получить правильную высоту UIScrollView от его подвидов

UIScrollView со следующим кодом:

- (void)generateScrollView { 

    _scrollView = [[UIScrollView alloc] initWithFrame:_containerView.frame]; 
    [_containerView addSubview:_scrollView]; 

    [self generateContentView]; 

} 

Где _containerView это UIView создается с помощью Interface Builder с следующие ограничения:

enter image description here

Затем я генерировать другой UIView, который я буду использовать в качестве контейнера для всех элементов пользовательского интерфейса:

- (void)generateContentView { 

    _contentView = [[UIView alloc] initWithFrame:_scrollView.frame]; 

    [_scrollView addSubview:_contentView]; 

} 

Затем я генерировать N элементов пользовательского интерфейса (UITextView, UIImageView ЕСС ..) и, наконец, пересчитать высоту и contentView и scrollView со следующим кодом:

- (void)recalculateScrollViewHeight { 

    CGRect contentRect = CGRectZero; 
    for (UIView *view in _contentView.subviews) { 
     contentRect = CGRectUnion(contentRect, view.frame); 

     NSLog(@"ContentRect height: %f", contentRect.size.height); 
    } 

    _contentView.frame = CGRectMake(_contentView.frame.origin.x, _contentView.frame.origin.y, _contentView.frame.size.width, contentRect.size.height + [[UIApplication sharedApplication] statusBarFrame].size.height + self.navigationController.navigationBar.frame.size.height); 

    NSLog(@"_contentView height: %f", _contentView.frame.size.height); 

    _scrollView.contentSize = _contentView.frame.size; 

} 

проблема заключается в том, что _scrollView отрезает часть содержания, потому что кажется, что расчетная высота его не правильно. Я борюсь с этой проблемой, и я не могу найти решение, кто-нибудь знает, почему расчетная высота неверна? Я пропустил свойство для UIScrollView или UIView?

РЕДАКТИРОВАТЬ: Это результат 2 NSLog: высота

ContentRect: 180,000000

ContentRect высота: 360,000000

ContentRect высота: 540,000000

_contentView Высота : 604,000000

Я добавил 3 UIImageView с высоты 180, так что результат является правильным, 540 + 20 (состояние высота бар) + 44 (навигационная панель по высоте), но до сих пор scrollView разрезает некоторые пиксели из последнего изображения. Также нет лишних промежутков между изображениями, они один за другим

+0

Вы можете распечатать значения contentRect и _contentView.frame в Пересчитать метод? –

+0

@TejaNandamuri Я отредактировал вопрос с NSLog – Signo

+1

Вместо того, чтобы делать это в 'viewDidLoad', что произойдет, если вы сделаете это в' viewDidAppear'? – trojanfoe

ответ

1

Я видел случаи, когда UIScrollView будет стараться и помогать, компенсируя себя, чтобы включить панель навигации, даже если она скрыта. Вы пытались отключить это свойство?

self.automaticallyAdjustsScrollViewInsets 

Предполагаю, что у вас есть scrollEnabled установлен на YES? Это немного выстрел в темноте, но я заметил, другие разрешающие подобные проблемы здесь путем отключения и повторного включения прокрутки:

Large Text Being Cut Off in UITextView That is Inside UIScrollView

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