Внутри viewDidLoad
моего UIViewController
Я творю:не удается получить правильную высоту UIScrollView от его подвидов
UIScrollView
со следующим кодом:
- (void)generateScrollView {
_scrollView = [[UIScrollView alloc] initWithFrame:_containerView.frame];
[_containerView addSubview:_scrollView];
[self generateContentView];
}
Где _containerView
это UIView
создается с помощью Interface Builder с следующие ограничения:
Затем я генерировать другой 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
разрезает некоторые пиксели из последнего изображения. Также нет лишних промежутков между изображениями, они один за другим
Вы можете распечатать значения contentRect и _contentView.frame в Пересчитать метод? –
@TejaNandamuri Я отредактировал вопрос с NSLog – Signo
Вместо того, чтобы делать это в 'viewDidLoad', что произойдет, если вы сделаете это в' viewDidAppear'? – trojanfoe