поддерживать поведение прокрутки и полосы прокрутки при изменении содержимого UIScrollView - PullRequest
0 голосов
/ 18 апреля 2011

Мне потребовалось настраиваемое представление для переключения вкладок для моего приложения, поэтому я создал .xib с UIScrollView и UITabBar.

Я добавил метод ClearChildren и SwitchViews в UIScrollView следующим образом:

public static class Extensions
{
    #region UIScrollView extensions
    public static void ClearChildren (this UIScrollView scrollViewer)
    {
        foreach(var subview in scrollViewer.Subviews)
        {
            subview.RemoveFromSuperview();
        }
    }

    /// <summary>
    /// switches the content views of a UIScrollView entirely
    /// with for example a tab-bar.
    /// </summary>
    /// <param name="scrollViewer">
    /// A <see cref="UIScrollView"/>
    /// </param>
    /// <param name="newView">
    /// A <see cref="UIView"/>
    /// </param>
    public static void SwitchViews (this UIScrollView scrollViewer, UIView newView)
    {

        scrollViewer.ClearChildren();
        scrollViewer.AddSubview(newView);



        //reset content size
        scrollViewer.ContentSize = new System.Drawing.SizeF(newView.Bounds.Width, newView.Bounds.Height);

    }


    #endregion
}

однако, когда я переключаю представления на UIScrollView, используя someUiScrollView.SwitchViews(someOtherScrollView) UIScrollView внезапно теряет полосы прокрутки и допускает горизонтальную и вертикальную прокрутку.

как мне убедиться, что горизонтальная и вертикальная прокрутка UIScrollView не меняются, и чтобы мои полосы прокрутки были видны?

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Используйте NSLog, чтобы вывести значения myScrollView.showsHoriontalScrollIndicator и myScrollView.showsVerticalScrollIndicator и myScrollView.scrollingEnabled, чтобы увидеть, как они меняются.

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

Наконец, проверьте относительные значения contentSize и bounds (или frame) до и после переключения, так как это также может повлиять на поведение при прокрутке.

0 голосов
/ 18 апреля 2011

Представление, которое я загружал, оказалось немного шире, чем UIScrollView.

Если это можно было бы предотвратить, просто установив ширину нового представления в границах UIScrollView следующим образом:

...
            scrollViewer.ClearChildren();
            newView.Bounds = new System.Drawing.RectangleF(new PointF(0f,0f), new SizeF(scrollViewer.Bounds.Width, newView.Bounds.Height));
            scrollViewer.AddSubview(newView);
...

(естественно, это означает, что вид может иметь только вертикальную прокрутку, что я и хотел в этом конкретном примере)

...