如何获取使用自动布局的 UIView 的 x、y、宽度、高度
Posted
技术标签:
【中文标题】如何获取使用自动布局的 UIView 的 x、y、宽度、高度【英文标题】:How to get x, y, width, height of UIView which is using auto layout 【发布时间】:2015-08-26 10:28:48 【问题描述】:我正在尝试在我的 blue UIView
上设置掩码,我必须为其设置frame
掩码,但问题是blue UIView
正在使用auto layout
。
我怎样才能得到UIView
的x, y, width, height
使用auto layout
像这样使用[self.v.layer.mask setFrame:CGRectMake(?, ?, ?, ?)];
。
在使用auto layout
时,使用frame
之类的self.v.frame.size.width;
属性是否正确?还是有任何其他方法可以获取使用auto layout
的UIView x, y, width, height
。
请看下面的屏幕截图。
【问题讨论】:
您无法使用self.v.frame.size.width
实现您想要的吗?
@iphondroid 我读到的是使用自动布局时不使用框架。我不知道我得到了正确还是错误的值。
【参考方案1】:
使用自动布局系统时,您将无法获取/设置正确的帧。如果你真的想这样做。您可以使用以下方法
- (void)viewDidLayoutSubviews
建议您应该使用约束通过更新约束来更新视图的大小/位置。
例如:将您的视图约束和视图制作成 IBOutlet,然后像这样更新
self.myViewWidthConstraint.constant += 20;
[self.myView updateConstraints];
要获得你应该使用的宽度
self.myViewWidthConstraint.constant;
【讨论】:
【参考方案2】:当人们谈论不使用带有自动布局的框架时,他们的意思是“不要设置由自动布局处理的框架”,因为自动布局将正确处理设置框架。读取帧的值不是问题。
但请注意,每当布局视图时,自动布局可能会更改框架的值。所以你可能需要把你的更新代码放在viewDidLayoutSubviews
,例如:
- (void)viewDidLayoutSubviews
[super viewDidLayoutSubviews];
self.blueView.layer.mask.frame = self.blueView.bounds;
另外请注意,如果您的遮罩层是根据其框架绘制的,则每当其框架发生变化时,都需要重新绘制其内容。
【讨论】:
以上是关于如何获取使用自动布局的 UIView 的 x、y、宽度、高度的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AutoLayout 中设置 UIView 的框架?