ScrollView作为子视图不尊重框架边界

时间:2011-06-06 10:34:14

标签: xamarin.ios scrollview

我有一个UIScrollView(由视图控制器管理),我使用全屏和子视图。全屏版本工作正常 - 子视图没有。

子视图的位置使得它占据屏幕的下半部分,底部有一个小的20像素左右的边距。

最初它显示在正确的位置但覆盖了底部边距 - 即使scrollview的框架设置为离开边距。

当我通过拖动视图向上滚动视图时,整个视图向上移动并遮挡窗口的顶部。框架在点击顶部的导航栏时停止移动,并开始像普通的滚动视图一样滚动。如果我滚动得足够,它最终会显示屏幕底部的边距。

我不知道该怎么做 - 我已经尝试过每一个我能想到的春天组合。我现在正在查看子视图剪辑。

下面的图片。第一个显示初始页面加载时的滚动视图,除了下边距覆盖之外正确定位。滚动视图具有白色背景。

Initial load

第二张图片显示它向上滚动:

Scrolled up toward the top

第三张图片显示它一直向上滚动 - 请注意下边距已变为可见。

enter image description here

2 个答案:

答案 0 :(得分:3)

我不是100%肯定这个,但值得拍摄:我的猜测是你可能没有在你的桌子上正确设置Bounds属性。

要解决此问题,最简单的方法是设置myscrollview.clipsToBounds = true

答案 1 :(得分:0)

这里肯定是错的。我认为发生的事情是你将scrollview的相同实例添加为子视图。所以基本上你剩下的就是一个例子。您添加到“子视图”的任何内容基本上都会添加到超级视图中,因为它是同一个对象。

例如,这就是我认为你在视图控制器中所做的事情:

//...
private UIScrollView myScrollView;
public override void ViewDidLoad()
{
    this.myScrollView = new UIScrollView();
    this.View = this.myScrollView;
    this.View.AddSubview(this.mySrcollView); // same instance
    this.myScrollView.AddSubview(aUIButton); // "aUIButton" will be added in View also, since it is the same object
}

如果是这种情况,那就错了。我建议不要改变控制器的视图。如果您想拥有一个具有全屏UIScrollView的控制器,只需创建它并将其添加为子视图,确保AutoSizesSubviews属性为true。

这至少是我的理解。