我遇到了 ChildViewController View 的问题,它们的框架会自动更改为 parent 的框架。我已经将它提炼成一个带有单个类的示例项目来说明正在发生的事情。
简而言之,我:
所有 autoresizing mask/autoresizes subviews 设置为 NO。
这在 iOS 6 上运行,但也发生在 iOS 5.1 上!
更新!
似乎 addChildViewController 不知何故是罪魁祸首。不知道为什么 - 这是预期的行为吗?我需要能够将这些 childViewController 添加到 ScrollViewController 中,而它们的 View 框架不会自动缩放到它们的父 View 。这不是理论上的方法吗?
此外 - 任何地方都没有 NIB。在 Scrollview/ContainerView 和 71 个 VC View 中的每一个上将“translatesAutoresizingMaskIntoConstraints”设置为 NO。同样的事情,不幸的是。这似乎是非常奇怪的行为......
项目链接 - 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));
}
}
最佳答案
在 IOS 7.0 中使用 self.automaticallyAdjustsScrollViewInsets=NO;在 ViewDidLoad 中
关于objective-c - UIScrollView subview 容器错误地更改帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14024137/