У меня проблема с представлениями ChildViewController, когда их фреймы автоматически меняются на фреймы их родителей. Я перегнал его в пример проекта с одним классом, чтобы проиллюстрировать, что происходит.
Вкратце, я:
- иметь ScrollViewController
- добавьте ScrollViewController в качестве RootViewController и добавьте в окно
- В ScrollViewController — в ViewDidLoad я создаю Container UIView с фреймом {{0, 0}, {72704, 768}}
- Создайте UIScrollView с фреймом {{0, 0}, {1024, 768}}.
- Добавьте ScrollView в представление ScrollViewController.
- Добавьте контейнер в ScrollView
- Создайте 71 UIViewController с фреймом {{0, 0}, {1024, 768}}.
- Добавьте их как ChildViewControllers ScrollViewController.
- Добавьте свои подвиды в контейнер
- Зарегистрировать все 71 кадр в ViewDidAppear.
- Каждый кадр {{0, 0}, {72704, 768}} - НЕ 1024 x 768, который я установил.
Для всех автоматически изменяющихся масок / автоматически изменяющихся размеров подпредставлений установлено значение НЕТ.
Это работает на iOS 6, но также происходит и на iOS 5.1!
ОБНОВЛЕНИЕ! Похоже, что виноват addChildViewController. Не уверен, почему - это ожидаемое поведение? Мне нужно иметь возможность добавлять эти childViewControllers в ScrollViewController без автоматического масштабирования их фреймов представлений до их родителей. Разве это не способ сделать это теоретически?
Также - нигде нет СИБов. Установите для параметра «translatesAutoresizingMaskIntoConstraints» значение NO в Scrollview/ContainerView и каждом из 71 представления VC. То же самое, к сожалению. Это кажется очень странным поведением...
Ссылка на проект - https://dl.dropbox.com/u/637000/TestingBug.zip
КОД ИЗ ScrollViewController:
- (void)viewDidLoad
{
[super viewDidLoad];
[self initScrollView];
[self createTestViews];
}
- (void)initScrollView {
if(scrollView == nil) {
containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 72704, 768)];
containerView.autoresizingMask = UIViewAutoresizingNone;
containerView.autoresizesSubviews = NO;
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
scrollView.autoresizingMask = UIViewAutoresizingNone;
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.autoresizesSubviews = NO;
scrollView.delegate = self;
[self.view addSubview:scrollView];
[scrollView addSubview:containerView];
}
}
- (void)createTestViews {
for(int count = 0; count < 71; count++) {
[self createTestView];
}
}
- (void)createTestView {
UIViewController *testVC = [[UIViewController alloc] init];
testVC.view.frame = CGRectMake(0, 0, 1024, 768);
[self addChildViewController:testVC];
[containerView addSubview:testVC.view];
[testVC didMoveToParentViewController:self];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
for(UIView *subview in containerView.subviews) {
// THIS IS {{0, 0}, {72704, 768}} NOT 1024 x 768
NSLog(@"BROKEN FRAME = %@", NSStringFromCGRect(subview.frame));
}
}