【问题标题】:How to create a UIView for both portrait and landscape layout如何为纵向和横向布局创建 UIView
【发布时间】:2012-09-25 14:57:37
【问题描述】:

我正在尝试创建一个适用于纵向和横向模式的 UIView,但不知道如何实现这一点。仅供参考 - 我正在通过代码布置所有组件,所以没有 XIB 或情节提要......这是一个要求。

我有一个名为createView 的方法,它列出了我在创建视图时调用的所有视图组件(按钮、标签等)。

我不知道的是,我的控制器在水平模式下通过addSubview:myNewCustomView 添加视图,那么在从纵向切换到横向时如何更改自定义 UIView 中组件的布局?

我是否会在我的自定义 UIView 中创建一个用于纵向布局和另一个用于横向布局的方法?如果我有两种方法,我是否必须获得父母的显示模式,横向或纵向,然后在我的自定义 UIView 中调用适当的 createView 方法?

【问题讨论】:

    标签: objective-c ios uiview


    【解决方案1】:

    您可以在 CustomView 类中覆盖 layoutSubviews 方法。 并在您的 ViewController 中调用您的 CustomView 对象上的 setNeedsLayout。 在您的 CustomView 中保留一个方向变量

    在自定义视图中:-

    - (void) layoutSubviews(){
        // set position and height width of the subviews according to this views params
    }
    

    在 YourViewController 中:-

    -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {
        [yourCustomViewObj setOrientation:orientation];
        [yourCustomViewObj setNeedsLayout];
    }
    

    【讨论】:

    • 但是在 layoutSubviews 中我怎么知道我应该布局横向还是纵向? L=CGRectMake(35, 759, 380, 72) P=CGRectMake(235, 49, 60, 12)
    • 您可以在 CustomView 中保留一个变量用于定位,并在调用 setNeedsLayout 之前在“willRotateToInterfaceOrientation”方法中设置该变量
    • 我宁愿不从 viewController 设置视图布局模式,而是让视图控制器在布局模式更改时自行完成。试图通过以下方式获取布局,但它不起作用 UIInterfaceOrientationIsLandscape([[UIDevice currentDevice]orientation])
    • 这样做有一个问题。即使您的设备处于横向状态,您的 ViewController 也可以保持纵向,并且您的视图应该与 ViewController 具有相同的方向
    猜你喜欢
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多