我有一个包含 UIView 的 UITableViewCell。当单元格是该部分中的唯一行(即在我的实现中未被选中)时,我想将 UIView 的所有角都圆化。如果选择了单元格,那么我只想将 UIView 的顶部两个角圆化。我正在尝试在自定义 tableviewcell 的 layoutSubviews 中执行此操作。
- (void)layoutSubviews
{
[super layoutSubviews];
self.roundedView.layer.mask = nil;
if (self.sectionSelected) {
self.maskLayer = [CAShapeLayer layer];
self.maskLayer.path = [UIBezierPath bezierPathWithRoundedRect:self.roundedView.bounds byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(10, 10)].CGPath;
self.roundedView.layer.mask = self.maskLayer;
} else {
self.maskLayer = [CAShapeLayer layer];
self.maskLayer.path = [UIBezierPath bezierPathWithRoundedRect:self.roundedView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(10, 10)].CGPath;
self.roundedView.layer.mask = self.maskLayer;
}
}
不幸的是,这种方法并不总是有效。如果我有一个纵向选择的单元格(self.sectionSelected = YES)。然后取消选择(self.sectionSelected = NO)。然后旋转到横向并再次选择单元格。它以纵向显示的大小显示单元格。所以我相信它仍然在应用肖像图层蒙版而不是风景蒙版。如果我将它滚动出 View 然后再返回,它会更新为适当的宽度。另外值得注意的是,我调用 [self.tableView reloadData];在 didRotateFromInterfaceOrientation 中。
有什么办法可以避免这个问题?提前致谢
最佳答案
只需添加“self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth;”即可解决
关于ios - 如何在旋转时处理 UIView 圆角(使用 CAShapeLayer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23326045/