设置超出xib文件视图的视图以适应滚动视图+不同的xib用于方向 - iOs

时间:2011-07-19 12:05:47

标签: ios uiscrollview orientation xib

我有一个UIScrollView,其中包含一个视图控制器,其中包含几个控制器 - 文本字段,按钮,图像等... 当它在纵向模式下显示时,我希望它表现得好像没有滚动视图(当然,它仍然存在,但禁用了滚动和弹跳等,内容大小是应用程序框架的大小),而自定义视图只是正常显示,但切换到横向时,我想让滚动视图可供使用,以避免用户界面紧张。

我想使用特定的xib文件进行纵向/横向模式,而不是使用代码以不同方式放置对象,因为本地化原因 我遇到了3个问题:

1)我无法在旋转时找到一种方法来加载并向控制器应用不同的xib(我希望它也是一个平滑过渡,但现在不那么重要了)

2)我找不到在xib文件中设置超出应用程序框架的东西的方法(我没有直接在滚动视图中的按钮等,但在滚动视图内的自定义视图内) ,所以我不能在滚动视图的不可见部分放置任何东西(需要滚动的部分才能被看到)

3)我无法通过xib文件找到指定滚动视图内容大小的方法,这是为了使界面尽可能灵活地进行本地化所必需的。

您对如何实施/解决这些需求有任何想法吗?

提前致谢!

1 个答案:

答案 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中取出每个自动调整大小(因为您将单独定义其框架)。