HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 在UITableViewCell的子视图上设置遮罩层会覆盖自动布局约束大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_674_1@
我有一个带有多个子视图的UITableViewCell.其中一个子视图是UILabel,单元格的高度根据UILabel中的文本量动态调整大小.这非常有效.

我在单元格中有另一个子视图也有约束.该子视图始终应与单元格具有完全相同的高度.这也非常有效.

但是,在尝试在该子视图上设置遮罩层时遇到问题.遮罩层正常工作,但子视图的高度错误,并且与单元格的高度不同.

这是我的掩码层代码

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.mySubview.bounds
                                              byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomLeft | UIRectCornerBottomRight)
                                                    cornerRadii:CGSizeMake(10,10)];

CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = self.mySubview.bounds;
maskLayer.path = maskPath.CGPath;
self.mySubview.layer.mask = maskLayer;

我一直在做研究,并试图找到一种方法解决这个问题,所以我既可以设置遮罩层,也可以让子视图具有正确的高度,但我无法让它工作.

我已经看过几次推荐这个解决方案了:

[self setNeedLayout];
[self layoutIfNeeded];
// Customize cell after here

但这对我也不起作用.有没有办法让我知道何时应用了自动布局约束,以便我可以在之后应用遮罩层?

掩码层代码非常简单,它使用子视图的边界,并且边界是关闭的,因为它使用了在应用约束之前存在的边界并且子视图具有正确的高度.至少我认为我理解正确.

解决方法

我@R_874_9379@.我不确定这是否是放置它的正确位置,或者它是否可能导致性能问题,但到目前为止它完美地工作:

- (void)drawRect:(CGRect)rect
{
  [super drawRect:rect];

  UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.mySubview.bounds
                                               byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomLeft | UIRectCornerBottomRight)
                                                     cornerRadii:CGSizeMake(10,10)];

  CAShapeLayer *maskLayer = [CAShapeLayer layer];
  maskLayer.frame = self.mySubview.bounds;
  maskLayer.path = maskPath.CGPath;
  self.mySubview.layer.mask = maskLayer;

}

我必须在我的UITableViewCell子类中覆盖drawRect:并在那里设置掩码层.

大佬总结

以上是大佬教程为你收集整理的ios – 在UITableViewCell的子视图上设置遮罩层会覆盖自动布局约束全部内容,希望文章能够帮你解决ios – 在UITableViewCell的子视图上设置遮罩层会覆盖自动布局约束所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。