Это проблема с компоновкой.
Я буду использовать размер экрана iPhone5S в качестве примера, чтобы объяснить это.
Для нормальной ситуации размер вашего вида «Рамка = {X = 0, Y = 0, Ширина = 375, Высота = 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);
}
}
}
Надеюсь, это может вам помочь.
Если вам все еще нужен совет, оставьте сообщение здесь, я проверю его последним.