【问题标题】:Rounder by UIBezierPath issue when scrolling滚动时 UIBezierPath 问题的舍入
【发布时间】:2016-04-05 08:24:15
【问题描述】:

我是 iOS 新手。我正在制作一个聊天应用程序。我正在使用UITableView 显示消息聊天(一个单元格 - 一个消息)。
在每个单元格中,我会在 2,3 或 4 角处将消息四舍五入(如 Facebook 聊天)

对于更圆,我在每个Tableview CelllayoutSubView 中使用UIBezierPath

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.messageView.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerBottomLeft) cornerRadii:CGSizeMake(3.0, 3.0)];

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

问题是,当布局第一次初始化时,一切正常,但是当我滚动某些单元格时出现错误的舍入器(我发现问题是有时滚动 self.messageView.bounds 返回错误的值所以@ 987654330@画错角)但我不知道为什么

我怎样才能防止它发生? 或者我是否可以在没有UIBezierPath 的情况下使用另一种方法来舍入视图(我谷歌但我只找到一种舍入 UIView 的方法是使用 UIBezierPath :()?
任何帮助将不胜感激

【问题讨论】:

  • 试试这个代码 [v.layer setCornerRadius:30.0f]; // 边框 [v.layer setBorderColor:[UIColor lightGrayColor].CGColor]; [v.layer setBorderWidth:1.5f]; // 投影 [v.layer setShadowColor:[UIColor blackColor].CGColor]; [v.layer setShadowOpacity:0.8]; [v.layer setShadowRadius:3.0]; [v.layer setShadowOffset:CGSizeMake(2.0, 2.0)];
  • @DarjiJigar 我的要求是rounder the message in 2,3 or 4 corner,你的代码只在4个角落变圆
  • 检查一下stackoverflow.com/questions/4847163/round-two-corners-in-uiview,但我猜(你也是这么说的)这个问题不是在绘图上而是在获得正确的边界上,所以我会专注于修复它而不是避免使用贝塞尔路径
  • @Injectios 谢谢。但在您给定的链接中,接受答案是 5 年前,另一个新答案是使用 UIBezierPath 就像我的代码一样

标签: ios objective-c uitableview uibezierpath


【解决方案1】:

我遇到了类似的问题,并通过将我的圆角代码移动到 tableView:willDisplayCell:forRowAtIndexPath 中来解决它这将允许 Cocoa 正确调整大小。

【讨论】:

    【解决方案2】:

    我有一个类似的问题,并通过在 layoutSubviews() 中移动代码来解决它

    override func layoutSubviews() {
            DispatchQueue.main.async {
                self.maskLayer.path = UIBezierPath(roundedRect: self.messageBGView.bounds, byRoundingCorners: [.topLeft, .topRight,.bottomLeft], cornerRadii: CGSize(width: 20, height: 20)).cgPath
                self.messageBGView.layer.mask = self.maskLayer
                self.messageBGView.layer.masksToBounds = true
            }
        } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2013-04-12
      • 2011-08-23
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多