当改变UIScrollView的内容时,保持滚动行为和滚动条可见性
本文关键字:滚动 可见性 滚动条 UIScrollView 改变 | 更新日期: 2023-09-27 17:50:32
我需要为我的应用程序定制一个选项卡切换视图,所以我制作了一个带有UIScrollView和UITabBar的.xib。
我给UIScrollView添加了一个'ClearChildren'和一个'SwitchViews'方法,如下所示:
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
}
然而,当我使用someUiScrollView.SwitchViews(someOtherScrollView)
切换UIScrollView上的视图时UIScrollView突然失去了滚动条,允许水平和垂直滚动。
我如何确保水平和垂直滚动行为的UIScrollView不改变,并保持我的滚动条可见?
使用NSLog转储myScrollView的值。showshoriontalscrolllindicator和myScrollView。showsverticalscrolllindicator和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);
...
(当然这意味着视图只能有垂直滚动,这是我在这个特殊的例子中想要的)