菜鸟教程小白 发表于 2022-12-13 11:57:22

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


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

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

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

<pre><code>if(toInterfaceOrientation==UIInterfaceOrientation.LandscapeLeft || toInterfaceOrientation==UIInterfaceOrientation.LandscapeRight){

      _scrollView.RemoveFromSuperview();
      this.View.Add (_scrollViewLandscape);
      }else{
      _scrollViewLandscape.RemoveFromSuperview();
      this.View.Add (_scrollView);
}
</code></pre>

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

<p>是否有布置 View 的最佳做法?而且我知道 <code>ShouldAutorotateToInterfaceOrientation</code> 但这对我不起作用,因为我正在做很多所有者绘制的东西,在自动调整大小时会损坏( <a href="https://stackoverflow.com/questions/9428427/filling-background-on-ipad-doesnt-fill-whole-screen-in-landscape-mode" rel="noreferrer noopener nofollow">see my other question</a> )。 </p>

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

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

<p><strong>UPDATE2:</strong>简单而基本的代码片段</p>

<pre><code>public override void ViewDidLoad ()
    {
      base.ViewDidLoad ();            
      Console.WriteLine (this.InterfaceOrientation);
    }
</code></pre>

<p>返回纵向。即使模拟器处于横向模式。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在你的 UIViewController 里面可以检查 InterfaceOrientation</p>

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

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

<p><strong>更新:使用 AutoresizingMask</strong></p>

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

<p><strong>更新:覆盖 LayoutSubviews</strong></p>

<p>每次尺寸改变时都会调用LayoutSubviews</p>

<pre><code>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
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 以正确方向以编程方式显示 UIView 的最佳实践,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9531614/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9531614/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 以正确方向以编程方式显示 UIView 的最佳实践