Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改UIScrollView内容时保持滚动行为和滚动条可见性_C#_Iphone_C# 4.0_Mono_Xamarin.ios - Fatal编程技术网

C# 更改UIScrollView内容时保持滚动行为和滚动条可见性

C# 更改UIScrollView内容时保持滚动行为和滚动条可见性,c#,iphone,c#-4.0,mono,xamarin.ios,C#,Iphone,C# 4.0,Mono,Xamarin.ios,我的应用程序需要一个自定义选项卡切换视图,所以我用UIScrollView和UITabBar创建了一个.xib 我向UIScrollView添加了“ClearChildren”和“SwitchView”方法,如下所示: public static class Extensions { #region UIScrollView extensions public static void ClearChildren (this UIScrollView scrollViewer)

我的应用程序需要一个自定义选项卡切换视图,所以我用UIScrollView和UITabBar创建了一个.xib

我向UIScrollView添加了“ClearChildren”和“SwitchView”方法,如下所示:

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扩展
公共静态void ClearChildren(此UIScrollView滚动查看器)
{
foreach(scrollViewer.Subviews中的var子视图)
{
subview.RemoveFromSuperview();
}
}
/// 
///完全切换UIScrollView的内容视图
///例如,使用选项卡栏。
/// 
/// 
///A
/// 
/// 
///A
/// 
公共静态void开关视图(此UIScrollView scrollViewer、UIView newView)
{
scrollViewer.ClearChildren();
scrollViewer.AddSubview(newView);
//重置内容大小
scrollViewer.ContentSize=new System.Drawing.SizeF(newView.Bounds.Width,newView.Bounds.Height);
}
#端区
}
但是,当我使用
someUiScrollView.switchView(someOtherScrollView)
UIScrollView会突然丢失其滚动条,并允许水平和垂直滚动


如何确保UIScrollView的水平和垂直滚动行为不发生更改,并保持滚动条可见?

使用NSLog转储myScrollView.showsHoriontalScrollIndicator和myScrollView.showsVerticalScrollIndicator和myScrollView.scrollingEnabled的值以查看它们的更改情况

在删除滚动视图的所有子视图时,我也要小心。相反,当您添加子视图时,请跟踪它们(可能使用标记,或者在单独的数组中),并且只删除您自己显式添加的子视图


最后,检查切换前后contentSize和bounds(或frame)的相对值,因为这可能也会影响滚动行为。

我加载的视图比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);
...

(当然,这意味着视图只能进行垂直滚动,这就是我在这个特定示例中想要的)

好建议,但我将问题本身扼杀在萌芽状态,它确实是我加载的视图的边界。它们比scrollviewer稍宽一点,scrollviewer会自动启用horizontall滚动。谢谢你的时间,还有+1