【问题标题】:How to get x, y, width, height of UIView which is using auto layout如何获取使用自动布局的 UIView 的 x、y、宽度、高度
【发布时间】: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 我读到的是使用自动布局时不使用框架。我不知道我得到了正确还是错误的值。

标签: ios objective-c uiview autolayout calayer


【解决方案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;
    }
    

    另外请注意,如果您的遮罩层是根据其框架绘制的,则每当其框架发生变化时,都需要重新绘制其内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多