标签栏显示在屏幕外

时间:2016-09-20 09:34:45

标签: xamarin xamarin.ios uitabbar

我的问题在于,当接听电话或WiFi热点处于活动状态时,底部的标签栏会移出屏幕。

No extended status bar Extended status bar

这似乎是我需要使用的,但我没有成功 developer.xamarin.com/api/property/MonoTouch.UIKit.UIView.AutoresizingMask /

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

这是一个布局问题。

我将以iPhone5S的屏幕尺寸为例进行解释。

对于正常情况,您的视图大小为" Frame = {X = 0,Y = 0,Width = 375,Height = 667}",等于屏幕大小,但iOS系统将使所有视图的帧到"帧= {X = 0,Y = 20,宽度= 375,高度= 647}"当个人热点被激活时。

它还会调用所有视图的方法" LayoutSubviews",您可以抓住它并按照您的意愿处理它。

这是一个适合您的样本,您应该根据自己找到解决方案。

using System;
using CoreGraphics;
using UIKit;

namespace TestLayoutSubview
{
    public partial class ViewController : UIViewController
    {
        private MyView myView;

        protected ViewController(IntPtr handle) : base(handle)
        {
            // Note: this .ctor should not contain any initialization logic.
        }

        public override void LoadView()
        {
            myView = new MyView();
            this.View = myView;
        }

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            // Perform any additional setup after loading the view, typically from a nib.
        }

        public override void DidReceiveMemoryWarning()
        {
            base.DidReceiveMemoryWarning();
            // Release any cached data, images, etc that aren't in use.
        }
    }

    class MyView : UIView
    {
        private UIView bottomBar;

        public MyView()
        {
            this.BackgroundColor = UIColor.Red;

            bottomBar = new UIView();
            bottomBar.BackgroundColor = UIColor.Green;
            this.AddSubview(bottomBar);

            nfloat barHeight = 50;
            bottomBar.Frame = new CGRect(0, UIScreen.MainScreen.Bounds.Height - barHeight, UIScreen.MainScreen.Bounds.Width,barHeight);
        }

        public override void LayoutSubviews()
        {
            base.LayoutSubviews();
            Console.WriteLine("Frame is changed.");
            Console.WriteLine("Frame = "+Frame);

            nfloat barHeight = 50;
            bottomBar.Frame = new CGRect(0, UIScreen.MainScreen.Bounds.Height - barHeight - Frame.Y, UIScreen.MainScreen.Bounds.Width, barHeight);
        }
    }
}

希望它可以帮到你。

如果你仍然需要一些建议,请留言,我会在后面检查。

答案 1 :(得分:0)

这可以使用约束而不是自动调整大小掩码来实现。如果你的顶部栏有一个固定的高度,你的底部视图有一个固定的高度,你的中间视图没有固定的高度,那么当状态栏扩展你的中间视图将缩小而不是按下一切。这是关于约束的教程

https://developer.xamarin.com/guides/ios/user_interface/designer/designer_auto_layout/