Objective c iOS8不同的行为:带有view.transform=CGAffineTransformMakeScale(0.5,0.5)的自动布局,视图未正确定位
我用的是自动布局 我想制作一个更小的UISwitch,然后使用Objective c iOS8不同的行为:带有view.transform=CGAffineTransformMakeScale(0.5,0.5)的自动布局,视图未正确定位,objective-c,autolayout,ios8,cgaffinetransform,uiswitch,Objective C,Autolayout,Ios8,Cgaffinetransform,Uiswitch,我用的是自动布局 我想制作一个更小的UISwitch,然后使用view.transform=CGAffineTransformMakeScale(0.5,0.5)来实现它 此开关上方还有另一个视图。 此开关的前缘应与此视图的前缘对齐,并且视图和开关之间有固定的垂直空间,如下图所示: 对iOS7的看法 但是,iOS8上有不同的外观: 对iOS8的看法 似乎约束未应用于此开关 但是我调用了self.view.layoutSubviews()和 self.view.layoutifneed() 它不起
view.transform=CGAffineTransformMakeScale(0.5,0.5)
来实现它
此开关上方还有另一个视图。
此开关的前缘应与此视图的前缘对齐,并且视图和开关之间有固定的垂直空间,如下图所示:
对iOS7的看法
但是,iOS8上有不同的外观:
对iOS8的看法
似乎约束未应用于此开关
但是我调用了self.view.layoutSubviews()和
self.view.layoutifneed()
它不起作用
如何让此开关始终粘贴到上述视图的右下角
这是一个未按比例缩小的开关
这里有两种可能的方法:要么子类UISwitch并尝试在子类中应用所有需要的修改,要么定义一个新的UIView,其中包含一个修改后的UISwitch作为子视图。子类可能是最快的,但它更复杂,风险更大,因为UISwitch并不打算成为这种修改的子类 假设您选择子类化路线,以下是您需要进行的修改:
self
alignmentRectForFrame:
,因此它返回super.alignmentRectForFrame:
加上缩放变换intrinsicContentSize
,因此它返回super.intrinsicContentSize
加上缩放变换基本上,数字1应该执行实际的视觉转换。但是2和3对于通知Auto Layout新视图的大小是必需的,因为默认情况下AL不知道变换。视图的变换发生在视图的中心周围,因此当您调用
view.transform = CGAffineTransformMakeScale(0.5, 0.5)
在iOS 8中看起来像这样是有道理的,在iOS 7中看起来不错的原因可能是因为iOS 7中有一个bug
尝试更改前导约束的常量,如下所示:
self.switchLeadingConstraint.constant = -(self.mySwitch.bounds.size.width/4)
这样你就可以弥补你在iOS 8中的越位 自动布局不适用于图层transforms@MaxMacLeod我只是想知道为什么相同的代码在iOS7和iOS8上有不同的行为。我想你的意思是这个答案,对吧?我猜它的行为是这样的,因为UISwitch的固有内容大小保持在默认的w:51px h:31px,尽管视图转换发生了变化。您应该尝试对UISwitch进行子类化,并通过返回CGSizeMake(25.5f,15.5f)重写-(CGSize)intrinsicContentSize方法