ios - 如何在旋转时处理 UIView 圆角(使用 CAShapeLayer)

标签 ios objective-c uitableview uiview

我有一个包含 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/

相关文章:

ios - 所有数据都显示在一行中

ios - 删除委托(delegate)方法的 2 个实现中的重复代码

ios - 当另一个警报出现时,alertview 关闭

ios - 初始化 UIView 时避免 (void)drawRect

ios - 在 xcode 5 中重构和重命名后,符号导航器中的 View Controller 名称不会更改

iphone - 将属性设置为 nil 是否与释放属性相同?

ios - 在 uitableview 中获取特定行的实例

ios - Swift:手势识别器无法识别选择器发送到实例

objective-c - 如何跟踪 Xcode 程序崩溃的位置

iOS:如何从 Swift 文件中的 Constant.h ObjC 获取#define?