csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.3 KiB
82 lines
2.3 KiB
using System;
|
|
using Avalonia.Metadata;
|
|
using UIKit;
|
|
|
|
namespace Avalonia.iOS;
|
|
|
|
[Unstable]
|
|
public interface IAvaloniaViewController
|
|
{
|
|
#if !TVOS
|
|
UIStatusBarStyle PreferredStatusBarStyle { get; set; }
|
|
#endif
|
|
bool PrefersStatusBarHidden { get; set; }
|
|
Thickness SafeAreaPadding { get; }
|
|
event EventHandler? SafeAreaPaddingChanged;
|
|
}
|
|
|
|
/// <inheritdoc cref="IAvaloniaViewController" />
|
|
public class DefaultAvaloniaViewController : UIViewController, IAvaloniaViewController
|
|
{
|
|
#if !TVOS
|
|
private UIStatusBarStyle? _preferredStatusBarStyle;
|
|
#endif
|
|
private bool? _prefersStatusBarHidden;
|
|
|
|
/// <inheritdoc/>
|
|
public override void ViewDidLayoutSubviews()
|
|
{
|
|
base.ViewDidLayoutSubviews();
|
|
var size = View?.Frame.Size ?? default;
|
|
var frame = View?.SafeAreaLayoutGuide.LayoutFrame ?? default;
|
|
var safeArea = new Thickness(frame.Left, frame.Top, size.Width - frame.Right, size.Height - frame.Bottom);
|
|
if (SafeAreaPadding != safeArea)
|
|
{
|
|
SafeAreaPadding = safeArea;
|
|
SafeAreaPaddingChanged?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
}
|
|
|
|
#if !TVOS
|
|
/// <inheritdoc/>
|
|
public override bool PrefersStatusBarHidden()
|
|
{
|
|
return _prefersStatusBarHidden ??= base.PrefersStatusBarHidden();
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public override UIStatusBarStyle PreferredStatusBarStyle()
|
|
{
|
|
// don't set _preferredStatusBarStyle value if it's null, so we can keep "default" there instead of actual app style.
|
|
return _preferredStatusBarStyle ?? base.PreferredStatusBarStyle();
|
|
}
|
|
|
|
UIStatusBarStyle IAvaloniaViewController.PreferredStatusBarStyle
|
|
{
|
|
get => _preferredStatusBarStyle ?? UIStatusBarStyle.Default;
|
|
set
|
|
{
|
|
_preferredStatusBarStyle = value;
|
|
SetNeedsStatusBarAppearanceUpdate();
|
|
}
|
|
}
|
|
#endif
|
|
|
|
bool IAvaloniaViewController.PrefersStatusBarHidden
|
|
{
|
|
get => _prefersStatusBarHidden ?? false; // false is default on ios/ipados
|
|
set
|
|
{
|
|
_prefersStatusBarHidden = value;
|
|
#if !TVOS
|
|
SetNeedsStatusBarAppearanceUpdate();
|
|
#endif
|
|
}
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public Thickness SafeAreaPadding { get; private set; }
|
|
|
|
/// <inheritdoc/>
|
|
public event EventHandler? SafeAreaPaddingChanged;
|
|
}
|
|
|