Почему границы моего UIScrollView меняются при повороте устройства? - PullRequest
1 голос
/ 15 сентября 2011

Я добавляю вид моего контроллера представления в главное окно.Мое представление контроллера представления является UIScrollView.Границы вида установлены на 500x500, и вид действительно отображается с правильным размером.Однако, если я поверну устройство, представление прокрутки будет развернуто и сожрает все доступное пространство.

У меня нет нигде маски с автоматическим изменением размера, и я не изменяю границы представления прокрутки.Что меняет рамку / границы моего вида прокрутки?

this.oPdfController = new PdfViewController(NSUrl.FromFilename("./pdffeatures.pdf"), 2); 
this.oPdfController.View.Frame = new RectangleF(new PointF(40, 40), new SizeF(500, 500));
this.oPdfController.View.AutoresizingMask = UIViewAutoresizing.None;
window.AddSubview (this.oPdfController.View);

Вот источник контроллера:

using System;
using MonoTouch.UIKit;
using MonoTouch.CoreAnimation;
using MonoTouch.CoreGraphics;
using MonoTouch.Foundation;
using System.Drawing;

namespace PdfViewerTest
{
    public class PdfViewController : UIViewController
    {
        public PdfViewController (IntPtr handle) : base( handle )
        {
        }

        public PdfViewController (NSUrl oUrl, int iPage) : base(  )
        {
        }

        public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
        {
            return true;
        }

        public override void LoadView ()
        {
            base.LoadView ();

            UIScrollView oScrollView = new UIScrollView (new RectangleF (new PointF (0, 0), new SizeF(1, 1)));
            oScrollView.Delegate = new ScrollViewDelegate (this);
            oScrollView.MinimumZoomScale = 1.0f;
            oScrollView.MaximumZoomScale = 4.0f;
            oScrollView.BackgroundColor = UIColor.ScrollViewTexturedBackgroundColor;
            this.View = oScrollView;
        }

        /// <summary>
        /// Gets the scroll view.
        /// </summary>
        private UIScrollView ScrollView
        {
            get
            {
                return this.View as UIScrollView;
            }
        }

        /// <summary>
        /// Delegate for the scroll view.
        /// </summary>
        public class ScrollViewDelegate : UIScrollViewDelegate
        {
            public ScrollViewDelegate (PdfViewController oParentController) : base(  )
            {
                this.oParentController = oParentController;
            }

            private PdfViewController oParentController;

            public override UIView ViewForZoomingInScrollView (UIScrollView scrollView)
            {
                           // Not implemented here.
                return null;
            }
        }
    }
}

1 Ответ

0 голосов
/ 16 сентября 2011

Я думаю, что это странное поведение связано с тем, что oScrollView становится прямым подпредставлением окна.
Я только что проверил ваш код и не смог найти решение для сохранения хорошего размера с этой структурой представления, но простымОбходной путь - добавить oScrollView в качестве подпредставления PdfViewController.View (только что протестировано (на симуляторе), размер остается неизменным даже при вращении).

Таким образом, ваш первый кодовый блок должен выглядеть так:

this.oPdfController = new PdfViewController(NSUrl.FromFilename("pdffeatures.pdf"), 2);
window.AddSubview (this.oPdfController.View);

и ваш контроллер:

using System;
using MonoTouch.UIKit;
using MonoTouch.CoreAnimation;
using MonoTouch.CoreGraphics;
using MonoTouch.Foundation;
using System.Drawing;

namespace PdfViewerTest
{
    public class PdfViewController : UIViewController
    {

        UIScrollView oScrollView = null;

        public PdfViewController (IntPtr handle) : base( handle )
        {
        }

        public PdfViewController (NSUrl oUrl, int iPage) : base(  )
        {
        }

        public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
        {
            return true;
        }

        public override void LoadView ()
        {
            base.LoadView ();

            oScrollView = new UIScrollView (new RectangleF (new PointF (0, 0), new SizeF(1, 1)));
            oScrollView.Delegate = new ScrollViewDelegate (this);
            oScrollView.MinimumZoomScale = 1.0f;
            oScrollView.MaximumZoomScale = 4.0f;
            oScrollView.BackgroundColor = UIColor.ScrollViewTexturedBackgroundColor;
            oScrollView.Frame = new RectangleF(new PointF(40, 40), new SizeF(500, 500));
            oScrollView.AutoresizingMask = UIViewAutoresizing.None;

            this.View.AddSubView(oScrollView);
        }

        /// <summary>
        /// Gets the scroll view.
        /// </summary>
        private UIScrollView ScrollView
        {
            get
            {
                return oScrollView;
            }
        }

        /// <summary>
        /// Delegate for the scroll view.
        /// </summary>
        public class ScrollViewDelegate : UIScrollViewDelegate
        {
            public ScrollViewDelegate (PdfViewController oParentController) : base(  )
            {
                this.oParentController = oParentController;
            }

            private PdfViewController oParentController;

            public override UIView ViewForZoomingInScrollView (UIScrollView scrollView)
            {
                           // Not implemented here.
                return null;
            }
        }
    }
}

HTH

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