У меня есть горизонтальный пейджинг UIScrollView, настроенный на две страницы. Внутри scrollview есть «контентный вид», который имеет ограничения, установленные таким образом, что это «размер содержимого» прокрутки. В представлении содержимого есть два подвыбора, первая страница и вторая. Это нормально работает, и я могу горизонтально перерисовывать страницы между двумя страницами. Нет вертикального «отскока», потому что страницы точно заполняют размер содержимого.UITextView внутри UIScrollView
Я еще ничего не добавил на первую страницу, но добавляю UITextView ко второй странице. Это текстовое представление имеет ограничения, установленные таким образом, чтобы он был центрирован на второй странице и помещался во второй странице. Намерение состоит в том, что в этом случае будет отображаться короткая запись, поэтому scrollEnabled устанавливается для NO для текстового представления. Текст должен легко вписываться в пространство без обрезания.
Я поместил некоторый фиктивный текст в текстовом виде, и все сработало нормально. Затем я немного увеличил шрифт. Хотя текст по-прежнему легко помещается внутри разрешенного пространства, теперь я получаю вертикальный «отскок» на scrollview - его, как будто размер содержимого теперь больше по вертикали (или вставки изменились). Я изучил их, и они все еще точно такие же, как и до изменения шрифта. Внутренний размер содержимого текстового представления немного больше (из-за увеличенного размера шрифта), но опять же в пределах ограничений. Что вызывает вертикальный отскок?
Вот код, определяющий виды и ограничения. Обратите внимание, что это находится внутри ячейки таблицы (c). setInfoPager - это прокрутка по горизонтали пейджинга и является подзором ячеек contentView.
UIView *contentView = [[UIView alloc] init];
contentView.translatesAutoresizingMaskIntoConstraints = NO;
[c.setInfoPager addSubview:contentView];
[c.setInfoPager addConstraint:[NSLayoutConstraint constraintWithItem:contentView
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:c.setInfoPager
attribute:NSLayoutAttributeRight
multiplier:1.f
constant:0.f]];
[c.setInfoPager addConstraint:[NSLayoutConstraint constraintWithItem:contentView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:c.setInfoPager
attribute:NSLayoutAttributeLeft
multiplier:1.f
constant:0.f]];
[c.setInfoPager addConstraint:[NSLayoutConstraint constraintWithItem:contentView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:c.setInfoPager
attribute:NSLayoutAttributeTop
multiplier:1.f
constant:0.f]];
[c.setInfoPager addConstraint:[NSLayoutConstraint constraintWithItem:contentView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:c.setInfoPager
attribute:NSLayoutAttributeBottom
multiplier:1.f
constant:0.f]];
[c.setInfoPager addConstraint:[NSLayoutConstraint constraintWithItem:contentView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:c.setInfoPager
attribute:NSLayoutAttributeWidth
multiplier:2.0
constant:0.f]];
[c.setInfoPager addConstraint:[NSLayoutConstraint constraintWithItem:contentView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:c.setInfoPager
attribute:NSLayoutAttributeHeight
multiplier:1.0
constant:0.f]];
UIView *pageOne = [[UIView alloc] init];
pageOne.translatesAutoresizingMaskIntoConstraints = NO;
[contentView addSubview:pageOne];
[contentView addConstraint:[NSLayoutConstraint constraintWithItem:pageOne
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeHeight
multiplier:1.f
constant:0.f]];
[contentView addConstraint:[NSLayoutConstraint constraintWithItem:pageOne
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeWidth
multiplier:0.5f
constant:0.f]];
[contentView addConstraint:[NSLayoutConstraint constraintWithItem:pageOne
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeLeft
multiplier:1.f
constant:0.f]];
[contentView addConstraint:[NSLayoutConstraint constraintWithItem:pageOne
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeTop
multiplier:1.f
constant:0.f]];
UIView *pageTwo = [[UIView alloc] init];
pageTwo.translatesAutoresizingMaskIntoConstraints = NO;
pageTwo.backgroundColor = [UIColor greenColor];
[contentView addSubview:pageTwo];
[contentView addConstraint:[NSLayoutConstraint constraintWithItem:pageTwo
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeHeight
multiplier:1.f
constant:0.f]];
[contentView addConstraint:[NSLayoutConstraint constraintWithItem:pageTwo
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeWidth
multiplier:0.5f
constant:0.f]];
[contentView addConstraint:[NSLayoutConstraint constraintWithItem:pageTwo
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeRight
multiplier:1.f
constant:0.f]];
[contentView addConstraint:[NSLayoutConstraint constraintWithItem:pageTwo
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeTop
multiplier:1.f
constant:0.f]];
UITextView *cardSetBlurb = [[UITextView alloc] init];
cardSetBlurb.scrollEnabled = NO;
cardSetBlurb.translatesAutoresizingMaskIntoConstraints = NO;
[pageTwo addSubview:cardSetBlurb];
cardSetBlurb.backgroundColor = [UIColor blackColor];
cardSetBlurb.textColor = [UIColor whiteColor];
cardSetBlurb.userInteractionEnabled = NO;
cardSetBlurb.font = [UIFont fontWithName:@"AvenirNext-Regular" size:12.f];
cardSetBlurb.text = @"blah blah blah sdfasdf dsfasdf asdfasdf asdfasdf asdfasdf asdfasdf asdfasdf something wicked this way comes";
[pageTwo addConstraint:[NSLayoutConstraint constraintWithItem:cardSetBlurb
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationGreaterThanOrEqual
toItem:pageTwo
attribute:NSLayoutAttributeLeft
multiplier:1.f
constant:0.f]];
[pageTwo addConstraint:[NSLayoutConstraint constraintWithItem:cardSetBlurb
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationGreaterThanOrEqual
toItem:pageTwo
attribute:NSLayoutAttributeTop
multiplier:1.f
constant:0.f]];
[pageTwo addConstraint:[NSLayoutConstraint constraintWithItem:cardSetBlurb
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationLessThanOrEqual
toItem:pageTwo
attribute:NSLayoutAttributeRight
multiplier:1.f
constant:0.f]];
[pageTwo addConstraint:[NSLayoutConstraint constraintWithItem:cardSetBlurb
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationLessThanOrEqual
toItem:pageTwo
attribute:NSLayoutAttributeBottom
multiplier:1.f
constant:0.f]];
[pageTwo addConstraint:[NSLayoutConstraint constraintWithItem:cardSetBlurb
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:pageTwo
attribute:NSLayoutAttributeCenterX
multiplier:1.f
constant:0.f]];
[pageTwo addConstraint:[NSLayoutConstraint constraintWithItem:cardSetBlurb
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:pageTwo
attribute:NSLayoutAttributeCenterY
multiplier:1.f
constant:0.f]];