在 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 上使用滑动手势返回