iOS8的不同行为:使用view.transform = CGAffineTransformMakeScale(0.5,0.5)的Autolayout,视图未正确定位

Hon*_*ang 6 objective-c uiswitch cgaffinetransform autolayout ios8

我正在使用自动布局,

我想制作一个较小的UISwitch,然后用view.transform = CGAffineTransformMakeScale(0.5, 0.5)它来实现它.

此开关上方还有另一个视图.此开关的前导应与此视图的前沿对齐,并且在视图和开关之间存在固定的垂直空间,如下图所示:

在此输入图像描述 关于iOS7的观点

但是,iOS8上有不同的外观:

在此输入图像描述 关于iOS8的观点

似乎约束不适用于此开关.

但是,我叫self.view.layoutSubviews()self.view.layoutIfNeeded()

它不起作用.

如何让这个开关始终贴在上面视图的右下角?

这里的开关没有按比例缩小

在此输入图像描述

alg*_*gal 0

这里有两种可能的方法:要么子类 UISwitch 并尝试在子类中应用所有需要的修改,要么定义一个新的 UIView,其中包含修改后的 UISwitch 作为子视图。子类可能是最快的,但它更棘手且风险更大,因为 UISwitch 并不打算成为此类修改的子类。

假设您采用子类化路线,以下是您需要进行的修改:

  1. 显然,将缩放变换应用于self

  2. override alignmentRectForFrame:,因此它返回super.alignmentRectForFrame:加上您的缩放变换。

  3. override intrinsicContentSize,因此它返回super.intrinsicContentSize加上您的缩放变换

基本上,1 号应该执行实际的视觉转换。但是 2 和 3 是通知自动布局新视图大小所必需的,因为默认情况下 AL 不知道变换。