iOS/Swift:保持“全局”视图平移不重置其他对象的位置,开启自动布局?

Posted

技术标签:

【中文标题】iOS/Swift:保持“全局”视图平移不重置其他对象的位置,开启自动布局?【英文标题】:iOS/Swift: Keep "global" view pan from resetting other objects' positions, w/ AutoLayout ON? 【发布时间】:2015-08-16 21:40:07 【问题描述】:

刚开始学习 Swift,跟随优秀的UIGestureRecognizer tutorial on Ray Wenderlich's site。它有两个图像,您可以四处移动(平移)和缩放(捏合)和旋转。工作正常。

但后来我尝试通过在主视图中添加一个平移手势识别器来扩展它,这样我就可以一次平移“场景”。以与两个图像相同的方式将其连接到 ViewController。哪个有效,但每次您在主视图中平移时,它重置其他对象的位置,即它们移回运行开始时的位置,忘记您可能移动的位置他们去。

这是一个 AutoLayout 问题(如线程 UILabel causing other objects to reset position on ios 中所述)。 (虽然我觉得这很奇怪,因为根本没有限制。无论如何。)

关闭自动布局确实可以防止任何重置发生,但是...... 最终出于其他原因我想使用 AutoLayout 构建应用程序,所以我想使用 AutoLayout 来做。

所以,根据UIView frames reset when using autolayout 向 viewDidLoad() 添加了一些代码, 即在情节提要中,我从“主视图”对象控制拖动到 ViewController.swift 的助手编辑器中,一行显示

@IBOutlet var mainView: UIView!

然后在我的 viewDidLoad 中,我添加了

mainView.translatesAutoresizingMaskIntoConstraints = true

但这没有任何效果,即重置行为仍然发生。 :-( 不会生成有关“无法同时满足约束”的警告。

有什么帮助吗?谢谢。运行 XCode 7 beta 5。

【问题讨论】:

如果问题已经解决,为什么还要发布?如果您认为它可能对其他人有所帮助,请仅发布问题(作为真实问题)并发布答案和实际答案。 好的,将尝试进行相应的编辑... 【参考方案1】:

解决了!啊。因此,需要此代码的是其他对象,而不是主视图!即代码现在读取...

@IBOutlet var mainView: UIView!
@IBOutlet weak var monkeyView: UIImageView!
@IBOutlet weak var bananaView: UIImageView!

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    //self.mainView.translatesAutoresizingMaskIntoConstraints = true // not needed
    self.monkeyView.translatesAutoresizingMaskIntoConstraints = true
    self.bananaView.translatesAutoresizingMaskIntoConstraints = true

通过这些更改,不会发生不必要的重置,但自动布局仍处于启用状态! :-)

【讨论】:

以上是关于iOS/Swift:保持“全局”视图平移不重置其他对象的位置,开启自动布局?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS Swift 中使用键盘平移手势处理文本输入视图移动

IOS Swift : UIPanGestureRecognizer 在 2 个不同的视图上

为啥当我在平移单元格时更改 UIImageView 的图像时,整个视图会重置一秒钟?

iOS Swift:以编程方式安装和卸载视图

在 ios swift 中导航到其他屏幕时,不鼓励在分离的视图控制器上显示视图控制器

如何创建固定导航栏 iOS Swift