是否可以将转换标识设置为当前转换状态?我关注的是使用自动布局,并且一旦应用了转换,框架现在是未定义的。这只是一个抽象的思维过程,实际上可能不是一个问题。
假设我应用CGAffineTransformMakeScale(1,-1)
来翻转UIView
,这是一些superView的子视图。现在我已经将一个转换应用到了subView框架:现在变得未定义,那么如果我调整superView的尺寸,那将如何影响superView中subView的大小和位置?
我的思维过程告诉我,如果我可以将“CGAffineTransformIdentity”设置为当前转换状态(例如翻转或旋转后),我设置的任何自动布局都将被正确处理,但如果没有设置,我会没有得到适当的自动布局处理。
所以我需要担心框架:未定义或自动布局是否使用转换视图的边界?
答案 0 :(得分:6)
...如果
transform
属性包含非标识转换,则frame
属性的值未定义且不应修改。在这种情况下,您可以使用center
属性重新定位视图,并使用bounds
属性调整大小。
但是,您可能不知道Auto Layout does not actually use the frame
of a view to align it, but instead uses the "alignment rect" of the view。使用alignmentRectForFrame:
检索视图的对齐rect。
文档指出
[{1}}]的默认实现会返回视图
alignmentRectForFrame:
修改的视图frame
。
并详细说,
大多数自定义视图都可以覆盖
alignmentRectInsets
以指定其内容在其框架内的位置。需要任意转换的自定义视图可以覆盖alignmentRectInsets
和alignmentRectForFrame:
来描述其内容的位置。这两种方法必须始终相互反转。
所以,回答你的问题,
所以我需要担心框架:未定义或自动布局是否使用转换视图的边界?
答案是,在一般情况下,您必须实施frameForAlignmentRect:
和alignmentRectForFrame:
,并确保它们彼此相反。