【问题标题】:Setting up views beyond the xib file's view to fit into a scroll view + Different xib for orientations - iOs在 xib 文件视图之外设置视图以适应滚动视图 + 不同的 xib 用于方向 - iOs
【发布时间】:2011-07-19 12:05:47
【问题描述】:

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

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

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

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

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

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

提前致谢!

【问题讨论】:

    标签: ios uiscrollview orientation xib


    【解决方案1】:

    我建议做你说过不会做的第一件事:

    我想为纵向/横向模式使用特定的 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 中的 UIView 中,在自定义视图(上述方法)中执行完全相同的操作。

    2) 在具有您的 CustomViewControllers 的视图中,您可以执行以下操作:

    -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
        //(everything that i posted above)
        [myCustomViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    }
    

    这样,您将使 customViewController 中的 UIViews 旋转。最后一个提示:禁用 autoresize-subviews 并从你的 UIViews 中取出每个自动尺寸(因为你将单独定义它们的框架)。

    【讨论】:

    • 虽然这很有帮助,但我确实在当前的应用程序中得到了 2 个 xib 文件。我对您的解决方案的问题是很难本地化它,而本地化 xib 则容易得多。我担心它会导致旋转不顺畅,但看起来完全一样。
    猜你喜欢
    • 2013-06-18
    • 2019-02-26
    • 1970-01-01
    • 2019-07-04
    • 2019-09-10
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多