我有一个UIScrollView,其中包含一个视图控制器,其中包含几个控制器 - 文本字段,按钮,图像等... 当它在纵向模式下显示时,我希望它表现得好像没有滚动视图(当然,它仍然存在,但禁用了滚动和弹跳等,内容大小是应用程序框架的大小),而自定义视图只是正常显示,但切换到横向时,我想让滚动视图可供使用,以避免用户界面紧张。
我想使用特定的xib文件进行纵向/横向模式,而不是使用代码以不同方式放置对象,因为本地化原因 我遇到了3个问题:
1)我无法在旋转时找到一种方法来加载并向控制器应用不同的xib(我希望它也是一个平滑过渡,但现在不那么重要了)
2)我找不到在xib文件中设置超出应用程序框架的东西的方法(我没有直接在滚动视图中的按钮等,但在滚动视图内的自定义视图内) ,所以我不能在滚动视图的不可见部分放置任何东西(需要滚动的部分才能被看到)
3)我无法通过xib文件找到指定滚动视图内容大小的方法,这是为了使界面尽可能灵活地进行本地化所必需的。
您对如何实施/解决这些需求有任何想法吗?
提前致谢!
答案 0 :(得分:0)
我建议你做第一件事,你说你不会这样做:
我想将特定的xib文件用于纵向/横向模式而不是 使用代码
以不同方式放置对象
我花了很多时间尝试使用不同的XIB用于不同的方向,但这是交易:
1)如果您在纵向中有UITextField,则在旋转为横向时,您必须确保纵向模式下的文本在横向上相同。你必须为每个对象做到这一点。
2)即使你不指望1)我也无法成功实现两个xibs解决方案。我不是说你不能这样做,我只是根据我的经验说,我无法做到这一点。
所以,如果您至少考虑使用1 xib解决方案,我可以解释一下:
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)orientation{
}
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
NSLog(@"My view will rotate");
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
[self viewsPositionPortrait];
} else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)){
[self viewsPositionLandScape];
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
NSLog(@"Register should rotate");
return YES;
}
-(void)viewsPositionPortrait{
//为纵向旋转创建“oneOfmyViews”的框架 oneOfMyviews.frame = CGRectMake(...,...,...,...); }
-(void)buttonsPositionLandScape{
//为景观旋转创建“oneOfmyViews”的框架 oneOfMyviews.frame = CGRectMake(...,...,...,...);
}
然后,您可以在viewsPosition方法中定义视图的帧。你赢了什么?
1)清洁代码。
2)美丽的过渡。
3)轻松指定滚动视图的内容大小。
对于旋转你的UIViews =>的问题CustomViewController => UIScrollView的。 你可以这样做:
1)在CustomViewController中为你的UIViews在自定义视图(上面的方法)中做同样的事情。
2)在包含CustomViewControllers的视图中,您可以执行以下操作:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
//(everything that i posted above)
[myCustomViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
这样您就可以在customViewController中旋转UIViews。最后一个提示:禁用autoresize-subviews并从UIViews中取出每个自动调整大小(因为您将单独定义其框架)。