我有一个带有三个子视图的viewController。 我也使用AutoLayout和大小类。 这些视图是动画的,并更改位置和大小。 在动画之后我更新了一个标签,但整个视图被重新绘制,因此每个视图都处于其初始位置和大小。这不应该发生。 正如在Apple开发人员参考中所说:
“UILabel类的默认内容模式是 UIViewContentModeRedraw。此模式会导致视图重绘 每次其边界矩形改变时的内容。你可以改变 此模式通过修改继承的contentMode属性 类“。
我似乎不清楚如何修改 -contentMode - 以更新该标签并保留视图-as is-。任何人都可以给我一个线索吗? 提前谢谢。
答案 0 :(得分:1)
听起来你可能正在使用自动布局来布局你的观点(例如,通过IB中的约束),但是你直接为你的动画操纵你的观点'frame
- 是这种情况吗?如果是这样,您应该设置约束的constant
值,或者可能是子视图的transform
。
如果您在使用自动布局的视图中直接操作框架,则系统下次放置视图时(例如,在标签文本更改后),您的更改将被覆盖。
您有3个选项可以解决您的问题 -
在Storyboard / Xib中停止使用AutoLayout。
不是一个好的解决方案
动画更改子视图的transform
属性。例如myView.transform = CGAffineTransformMakeScale(2.0,2.0);
对于演示和解雇动画很有用,但混合AutoLayout和变换在iOS 8.0之前有一些问题
为您需要在动画中更改的约束添加IBOutlets。动画更改这些约束的constant
值。
最强大的方法,但可以为复杂的动画带来很多属性和代码
答案 1 :(得分:0)
尝试contentMode = UIViewContentModeCenter。这样可以防止您重新看到重绘。虽然这可能不是您想要的contentMode。
选项2是使用CATextLayer绘制标签。它会很好地调整动画的大小,但设置起来要做的工作要多得多。