UIScrollView 将元素从它们的设置位置移动

Posted

技术标签:

【中文标题】UIScrollView 将元素从它们的设置位置移动【英文标题】:UIScrollView moves elements from their set positions 【发布时间】:2019-09-05 14:22:12 【问题描述】:

我正在为我组织中的所有工程师创建 ios 应用程序,以查看和完成他们的工作。但是,当使用 UIScrollView 时,它会将内容从我放置在故事板上的位置移开。

使用普通 UIView(不滚动),元素放置在我放置它们的位置,但是如果页面上有大量开关(动态)放置,它可能会溢出,因此我需要能够滚动浏览项目。

我正在使用storyboard here。创建我的主要布局。 但是,在我的滚动布局中,我使用此代码添加按钮。

y = StartY
x = StartX

foreach (var component in DetailItem.Components)

    y += yPls;
    UISwitch sw = new UISwitch(new CoreGraphics.CGRect(x, y, 51, 31));
    sw.OnTintColor = UIColor.Yellow;
    sw.ThumbTintColor = UIColor.Blue;

    sw.ValueChanged += (sender, e) => 
        var comp = sender as UISwitch;
        DetailItem.Components[component.Key] = comp.On;
    ;

    UILabel lbl = new UILabel(new CoreGraphics.CGRect(x + 55, y, 200, 31));
    lbl.Text = component.Key;
    this.Add(sw);
    this.Add(lbl);

问题是元素正在从我放置它们的位置移动,如下所示:

我目前选择了“工作名称:”标签,但您可以看到它正在被移动。

任何有关此问题的帮助或有关其发生原因的想法都会很棒!

【问题讨论】:

【参考方案1】:

在情节提要中选择ViewController,然后在Properties -> Widget -> Extend Edges 中,有一个名为Under Top Bars 的选项,取消选中该选项并在scrollView 将保持在正确的位置。

这是截图:

在后面的代码中,应该是:

this.EdgesForExtendedLayout = UIRectEdge.None or UIRectEdge.None.all or UIRectEdge.Bottom;

edgesForExtendedLayout 告诉应该扩展哪些边(左、右、上、下、全部、无或这些的任意组合)。延伸底边等于“Under Bottom Bars”记号,延伸顶边等于“Under Top Bars”记号。

查看document 和this thread 了解更多信息。

【讨论】:

以上是关于UIScrollView 将元素从它们的设置位置移动的主要内容,如果未能解决你的问题,请参考以下文章

UIStackView 在 UIScrollView 位置

从 UICollectionViewCell 到 UIScrollView 中的正确位置

iOS UIScrollView 以编程方式从下到上添加元素

将 UIView 从 xib 添加到 UIScrollView

Unity - 动画将游戏对象从其产生的位置移开?

UIScrollView - 将视图移到前面,但在滚动指示器下方