• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 以正确方向以编程方式显示 UIView 的最佳实践

[复制链接]
菜鸟教程小白 发表于 2022-12-13 11:57:22 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在构建一个 monoTouch-iPad 应用程序,但由于面向启动界面的原因,我正在磕磕绊绊。

一个问题是,当应用启动时 UIDevice.CurrentDevice.Orientation 总是返回 Unknown。你如何决定你的应用程序从哪个方向开始?我现在发现的所有属性都只返回纵向模式、未知或纵向模式的帧大小——即使它是横向模式。

我还创建了两个 UIView(一个用于横向,一个用于纵向)并在 UIViewController 的 WillRotate 方法中更改它们。但我的代码:

if(toInterfaceOrientation==UIInterfaceOrientation.LandscapeLeft || toInterfaceOrientation==UIInterfaceOrientation.LandscapeRight){

        _scrollView.RemoveFromSuperview();
        this.View.Add (_scrollViewLandscape);
        }else{
        _scrollViewLandscape.RemoveFromSuperview();
        this.View.Add (_scrollView);
}

在旋转屏幕时会产生短暂而难看的“闪烁” - 至少在模拟器中是这样。

是否有布置 View 的最佳做法?而且我知道 ShouldAutorotateToInterfaceOrientation 但这对我不起作用,因为我正在做很多所有者绘制的东西,在自动调整大小时会损坏( see my other question )。

我非常感谢不使用 Interface-Builder 的解决方案,因为我现在正在用代码做所有事情。

更新:简短描述我想要实现的目标: AppStart -> 知道正确的帧大小(1024,748 或 768,1004) -> 以正确的帧大小添加我的自定义 View

UPDATE2:简单而基本的代码片段

public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();            
        Console.WriteLine (this.InterfaceOrientation);
    }

返回纵向。即使模拟器处于横向模式。



Best Answer-推荐答案


在你的 UIViewController 里面可以检查 InterfaceOrientation

public override void ViewDidLoad ()
{
    if (this.InterfaceOrientation == UIInterfaceOrientation.Portrait
        || this.InterfaceOrientation == UIInterfaceOrientation.PortraitUpsideDown)
    {
        // portrait
    }
    else
    {
        // landsacpe
    }
}

但我真的建议使用 View.AutoresizingMask 或覆盖 LayoutSubviews,两者都可以使所有过渡都非常流畅

更新:使用 AutoresizingMask

public override void ViewDidLoad ()
{
    UIView view = new CustomView(View.Bounds);
    view.AutoresizingMask = UIViewAutoresizing.FlexibleHeight |  UIViewAutoresizing.FlexibleWidth;
    View.AddSubview(view);
}

更新:覆盖 LayoutSubviews

每次尺寸改变时都会调用LayoutSubviews

public class CustomView : UIView
{
    public override void LayoutSubviews ()
    {
        //layout your view with your own logic using the new values of Bounds.Width and Bounds.Height
    }
} 

关于ios - 以正确方向以编程方式显示 UIView 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9531614/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap