Xamarin iOS добавление кнопки «Назад» - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу настроить кнопку возврата, чтобы я мог предложить пользователю окно подтверждения. Для этого я удалил кнопку возврата по умолчанию, установив для скрытого свойства значение «True». и я добавляю новый элемент кнопки левой панели.

Но пользовательский интерфейс для кнопки левой панели не такой, как для кнопки возврата по умолчанию. пожалуйста, найдите прикрепленный скриншот. Ниже приведен код для кнопки левой панели -

UIImage image = UIImage.FromBundle ("BackButton"); UIButton customButton = новый UIButton (UIButtonType.Custom);
customButton.SetImage (image.ImageWithRenderingMode (UIImageRenderingMode.AlwaysTemplate), UIControlState.Normal); customButton.Frame = new CGRect (0, 0,
100, 44); customButton.ImageEdgeInsets = new UIEdgeInsets (0,
-40, 0, -40); this.NavigationItem.SetHidesBackButton (true, false); var backButton = new
UIBarButtonItem (customButton);
this.NavigationItem.LeftBarButtonItem = backButton;

enter image description here

Заранее спасибо!

1 Ответ

1 голос
/ 09 апреля 2020

Вам лучше масштабировать изображение, прежде чем устанавливать фоновое изображение.


UIImage image = UIImage.FromBundle("BackButton").ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);


UIImage newImg = ScalingImageToSize(image, new CGSize(30, 30)).ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);
UIButton customButton = new UIButton(UIButtonType.Custom);

            customButton.SetImage(newImg.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal), UIControlState.Normal);
customButton.Frame = new CGRect(0, 0, 50, 50);
customButton.ImageEdgeInsets = new UIEdgeInsets(0, -40, 0, -40);

NavigationController.NavigationBar.BackIndicatorImage = newImg;
NavigationController.NavigationBar.BackIndicatorTransitionMaskImage = newImg;

UIBarButtonItem buttonItem = new UIBarButtonItem(customButton);

NavigationItem.BackBarButtonItem = buttonItem;
 public UIImage ScalingImageToSize(UIImage sourceImage, CGSize newSize)
    {

        if (UIScreen.MainScreen.Scale == 2.0) //@2x iPhone 6 7 8 
        {
            UIGraphics.BeginImageContextWithOptions(newSize, false, 2.0f);
        }


        else if (UIScreen.MainScreen.Scale == 3.0) //@3x iPhone 6p 7p 8p...
        {
            UIGraphics.BeginImageContextWithOptions(newSize, false, 3.0f);
        }

        else
        {
            UIGraphics.BeginImageContext(newSize);
        }

        sourceImage.Draw(new CGRect(0, 0, newSize.Width, newSize.Height));

        UIImage newImage = UIGraphics.GetImageFromCurrentImageContext();

        UIGraphics.EndImageContext();

        return newImage;

    }

Опция 2

Вы можете создать пользовательскую панель навигации по своему усмотрению.

public class xxxViewController: UIViewController
    {
        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(animated);



            NavigationController.NavigationBar.Hidden = true;


            double height = IsiphoneX();

            UIView backView = new UIView()
            {
                BackgroundColor = UIColor.White,
                Frame = new CGRect(0,20,UIScreen.MainScreen.Bounds.Width, height),

            };

            // set 
            UIButton backBtn = new UIButton() {

                Frame = new CGRect(20, height-44, 40, 44),
                Font = UIFont.SystemFontOfSize(18),

            } ;


            UIImage image = UIImage.FromBundle("BackButton");

            UIImage newImg = ScalingImageToSize(image, new CGSize(30, 30));




 backBtn.SetBackgroundImage(newImg.ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate), UIControlState.Normal);



            backBtn.AddTarget(this,new Selector("GoBack"),UIControlEvent.TouchUpInside);

            UILabel titleLabel = new UILabel() {
                Frame=new CGRect(UIScreen.MainScreen.Bounds.Width/2-75, 0,150, height),
                Font = UIFont.SystemFontOfSize(20),
                Text = "xxx",
                TextColor = UIColor.Black,
                Lines = 0,

            };

            UILabel line = new UILabel() {

                Frame = new CGRect(0, height, UIScreen.MainScreen.Bounds.Width, 0.5),
                BackgroundColor = UIColor.Black,

            };

            backView.AddSubview(backBtn);
            backView.AddSubview(titleLabel);
            backView.AddSubview(line);

            View.AddSubview(backView);
        }


         double IsiphoneX()
        {

            double height = 44;

            if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
            {
                if (UIApplication.SharedApplication.Delegate.GetWindow().SafeAreaInsets.Bottom > 0.0)
                {
                    height = 64;
                }
            }

            return height;
        }

        [Export("GoBack")]
        void GoBack()
        {
            NavigationController.PopViewController(true);
        }

        public override void ViewWillDisappear(bool animated)
        {
            base.ViewWillDisappear(animated);

            NavigationController.NavigationBar.Hidden = false;
        }

    }

Вы можете установить необходимые свойства title, backButton и navigationBar (например, текст, цвет, BackgroundColor, шрифт, например)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...