如何获取使用自动布局的 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

我怎样才能得到UIViewx, y, width, height 使用auto layout 像这样使用[self.v.layer.mask setFrame:CGRectMake(?, ?, ?, ?)];

在使用auto layout 时,使用frame 之类的self.v.frame.size.width; 属性是否正确?还是有任何其他方法可以获取使用auto layoutUIView 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、宽度、高度的主要内容,如果未能解决你的问题,请参考以下文章

快速使用自动布局时为 UIView 高度设置动画

自动布局:Y 位置作为两个值的最大值

如何在自动布局视图中获取 UIButton 位置

如何在 AutoLayout 中设置 UIView 的框架?

UIView 使用自动布局调整大小,但在运行时获取其帧大小不正确 ios

故事板动态自动布局问题