我有一个视图,其中有一些文本视图正在按我的意愿工作。无论是横向还是纵向,都扩展到相同的右边距。
我最近尝试将普通视图更改为scrollview。尽管如此,我没有幸运能够像以前一样扩展这些文本视图。在横向模式下,所有东西都在左侧挤成一团,宽度与人像手机相同。
这是一些代码。
- (void)viewDidLoad {
CGSize screen = [self handleScreenOrientation];
[(UIScrollView *)self.view setContentSize:CGSizeMake(screen.width, screen.height)];
}
- (CGSize)handleScreenOrientation {
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
CGRect screenRect = [[UIScreen mainScreen] bounds];
if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown ) {
return CGSizeMake(screenRect.size.width, screenRect.size.height);
}
else {
return CGSizeMake(screenRect.size.height, screenRect.size.width);
}
}
- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
CGSize screen = [self handleScreenOrientation:toInterfaceOrientation];
UIScrollView *scrollView = (UIScrollView *)self.view;
scrollView.frame = CGRectMake(0, 0, screen.width, screen.height);
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height);
[scrollView setNeedsDisplay];
}
方法handleScreenOrientation与传递的方向与w / no参数相同,只是它使用传递的方向而不是状态栏的当前方向。
我已经检查过,我的scrollview设置为自动调整子视图。
任何想法都会非常感激。感谢。
更新:我已添加
self.view.autoresizesSubviews = true;
for (UIView *view in self.view.subviews) {
view.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth;
}
到viewdidload和willrotatetointerfaceorientation。没有变化。
答案 0 :(得分:0)
我认为问题在于您通过强制更改scrollView的contentSize来覆盖autoresizingMasks。虽然您已正确注意到screenSize始终处于纵向方向,因此您反转其横向尺寸,您将确定在设备实际旋转之前使用的方向。所以你强迫scrollView在横向上保持纵向尺寸。
保留autoresizeMask例程并丢弃willRotateToInterfaceOrientation例程。它现在有效吗?
如果没有,请尝试将willRotate代码放入* did * RotateToInterfaceOrientation。
另一个想法:
我注意到在viewDidLoad
中您将容器视图(self.view
)强制转换为UIScrollView。我想知道将容器视图保留为通用UIView,将UIScrollView添加为子视图,然后将textviews添加到滚动视图可能更好。
我可能在这里的左侧区域,但我从未在容器视图级别直接使用滚动视图,我想知道这可能是问题。