在 iOS 7 上,在 viewDidLoad 中设置图层变换会破坏自动布局

Posted

技术标签:

【中文标题】在 iOS 7 上,在 viewDidLoad 中设置图层变换会破坏自动布局【英文标题】:On iOS 7, setting a layer transform in viewDidLoad breaks auto layout 【发布时间】:2014-08-26 22:06:29 【问题描述】:

ios 7 上,对 viewDidLoad 中的视图层应用变换似乎会破坏自动布局。

在一个新项目中,我创建了两个视图,一个红色和一个绿色,并赋予它们相同的约束(在超级视图中水平居中、与顶部布局指南的距离、宽度和高度)。该应用程序通常看起来像这样(红色视图被完全覆盖):

然后我让ViewController.swift 看起来像这样:

import UIKit
import QuartzCore

class ViewController: UIViewController 

    @IBOutlet var subview: UIView?

    override func viewDidLoad() 
        super.viewDidLoad()

        subview!.layer.transform = CATransform3DMakeScale(0.6, 0.6, 1)

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1 * NSEC_PER_SEC)), dispatch_get_main_queue()) 
            self.subview!.layer.transform = CATransform3DIdentity
        
    

应用转换后,应用看起来像这样(注意转换的来源是错误的):

删除转换后,应用看起来像这样(注意绿色视图在错误的位置):

错误的定位似乎会持续视图的整个生命周期。我做错了什么还是这是一个直接的错误?有没有其他人遇到过它并找到了一个干净的解决方法?

【问题讨论】:

【参考方案1】:

尝试使用

subview!.transform = CGAffineTransformMakeScale(0.6, 0.6)

代替

subview!.layer.transform = CATransform3DMakeScale(0.6, 0.6, 1)

我遇到了类似的问题,这很有帮助。答案灵感: how to reset the view position to origin after scale

【讨论】:

以上是关于在 iOS 7 上,在 viewDidLoad 中设置图层变换会破坏自动布局的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上,一个 ViewController 的 viewDidLoad 中,子视图的数量是 0?哪种方法可以显示填充的数字?

ios 7 - 自定义 UIMenuItem 在 TableViewCell 上不起作用

在 iOS 上,当某些维度信息不可用时,我们如何在 viewDidLoad 中的屏幕上绘制东西?

iOS 7.1 UINavigationbar 和 UIToolbar

self.navigationItem.hide Back Button = YES 并在 iOS 7 上使用滑动手势返回

与 WKWebView 相关的 iOS 7 崩溃