第一次设置 UIView 的新位置,它跳到屏幕顶部

Posted

技术标签:

【中文标题】第一次设置 UIView 的新位置,它跳到屏幕顶部【英文标题】:First time setting a new position of a UIView, it jumps to the top of the screen 【发布时间】:2020-02-25 22:58:43 【问题描述】:

我构建了一个小的 ios 应用程序。

在这个应用程序中,我将 UIView 移动到不同的位置并使用 isHidden 属性显示它。这不是动画。视图是隐藏的,当我按下按钮时,视图会移动到特定位置并将显示在那里 (isHidden = false) 它工作正常,但是当我第一次点击按钮时,视图出现在屏幕顶部。

我只使用左、右、高和宽的自动布局。不是顶部或底部。所以我不知道为什么视图第一次出现在屏幕顶部。我已经检查了正确的位置。代码:

vErgebnis.frame.origin.y = pos_y

非常感谢

【问题讨论】:

如果您使用自动布局,则不应操纵frame - 您应该操纵自动布局约束以将视图放置在您想要的位置。视图确实需要一个顶部或底部约束,否则自动布局无法确定放置它的位置,因此它最终位于屏幕顶部。 【参考方案1】:

正如@Paulw11 所说,您不应该混合使用自动布局和框架操作。为了做你想做的事,我建议在视图顶部添加一个约束。然后我将该约束链接到视图控制器上的属性,当您单击按钮时,更改约束的 constant 属性的值以向上或向下移动视图。

【讨论】:

好的,我试试这个。正确的做法是什么?【参考方案2】:

如果您将使用自动布局,则无法设置框架矩形。您可以四种组合中的一项。并在按钮单击时更改约束值。对于 x 方向变化的前导和尾随。为y方向改变上下约束值。

    前导、顶部、宽度、高度约束。 尾随、底部、宽度、高度限制。 前导、底部、宽度、高度约束。 尾随、顶部、宽度、高度限制。

另一方面,如果您想使用框架,请按照这些步骤操作。

    首先隐藏了您的视图。 设置您想要的位置。 之后可见您的视图。

【讨论】:

以上是关于第一次设置 UIView 的新位置,它跳到屏幕顶部的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone X 中叠加时,UIView 的顶部位置不正确

在 tableview 滚动和再次拖动 tableview 上动画 UIView 位置

重新定位超出屏幕框架的视图

将 MPMoviePlayerController 视图置于 UIview 的中心(相同位置)

可以在 Xamarin PhotoView 组件中调整初始图像吗?

IOS/Objective-C:检测 UIVIew 上的滑动和屏幕相同位置的按钮触摸