Пара вопросов.
Сначала вы устанавливаете фрейм customV
на границы wantToShowHereView
- но вы делаете это в viewDidLoad()
.Эти границы почти наверняка изменятся между viewDidLoad()
и временем, когда вы на самом деле видите его на экране (размер устройства, ориентация и т. Д.).
Во-вторых, customV
- это UIView
, к которому вы добавляете«Корневое представление» XIB (которое содержит ваше представление прокрутки) как подпредставление для customV
... но вы не устанавливаете никаких ограничений (или других способов изменения размера) для , которые вид.
В-третьих, вы смешиваете относительные ограничения с абсолютными (ширина, высота, опережение, опережение и т. Д.), Что снова вызовет проблемы при изменении общего фрейма ... и вы явно устанавливаете фрейм customV
вместо добавления ограничений во время выполнения.
Вы можете начать исправление вещей:
Шаг первый - удалить customV
инстанцированиеот viewDidLoad()
.
Шаг второй - добавьте следующий метод viewDidAppear()
.
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
customView *customV = [[customView alloc] initWithFrame:self.wantToShowHereView.bounds];
customV.view.frame = customV.bounds;
[self.wantToShowHereView addSubview:customV];
}
Сделав только то, что должно дать вам правильно прокручиваемый вид.
Что вы вероятно хотите сделать, хотя, это сохранить инициализацию в viewDidAppear()
, но добавить туда ограничения, чтобы использовать автоматическое размещение.
Кроме того, я бы рекомендовал заново обработать ограничения на элементах в customView.xib
, поэтому прокрутка (contentSize) определяется фактическим содержанием вашего представления прокрутки, а не жестким кодированием высоты вашего contentView
.
Редактировать:
Вот как может выглядеть ваш viewDidLoad
(в ViewController.m
):
- (void)viewDidLoad
{
[super viewDidLoad];
customView *customV = [[customView alloc] initWithFrame:self.wantToShowHereView.bounds];
[self.wantToShowHereView addSubview:customV];
customV.translatesAutoresizingMaskIntoConstraints = NO;
[customV.topAnchor constraintEqualToAnchor:self.wantToShowHereView.topAnchor].active = YES;
[customV.bottomAnchor constraintEqualToAnchor:self.wantToShowHereView.bottomAnchor].active = YES;
[customV.leadingAnchor constraintEqualToAnchor:self.wantToShowHereView.leadingAnchor].active = YES;
[customV.trailingAnchor constraintEqualToAnchor:self.wantToShowHereView.trailingAnchor].active = YES;
}
и setup
в customView.m
:
- (void)setup {
[[NSBundle mainBundle] loadNibNamed:@"customView" owner:self options:nil];
[self addSubview:self.view];
self.view.translatesAutoresizingMaskIntoConstraints = NO;
[self.view.topAnchor constraintEqualToAnchor:self.topAnchor].active = YES;
[self.view.bottomAnchor constraintEqualToAnchor:self.bottomAnchor].active = YES;
[self.view.leadingAnchor constraintEqualToAnchor:self.leadingAnchor].active = YES;
[self.view.trailingAnchor constraintEqualToAnchor:self.trailingAnchor].active = YES;
NSLog(@"contentSize Height :%f", self.myscrollview.contentSize.height);
NSLog(@"contentView Height :%f", self.contentView.frame.size.height);
}