UITableView-Нижние Закругленные Углы

Я пытаюсь достичь нижних закругленных углов UITableView.

Я использовал ниже фрагмент кода, который существует в myutils.м —

/*
* To get rounded corners of view.
*/
+ (UIView *)roundCornersOnView:(UIView *)view rectCorner:(UIRectCorner)corner radius:(float)radius
{
   UIView *roundedView = view;
   UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:roundedView.bounds byRoundingCorners:corner cornerRadii:CGSizeMake(radius, radius)];
   CAShapeLayer *maskLayer = [CAShapeLayer layer];
   maskLayer.frame = roundedView.bounds;
   maskLayer.path = maskPath.CGPath;
   roundedView.layer.mask = maskLayer;
   return roundedView;
}

Затем я вызвал выше MyUtilsметод из моего файла swift на круглые углы 2 представлений. Одно естьUIView, а другое есть UITableView.

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
        MyUtils.roundCornersOnView(myUIView, rectCorner: [.TopLeft, .TopRight], radius: 15)
        MyUtils.roundCornersOnView(myTableView, rectCorner: [.BottomLeft, .BottomRight], radius: 15)
} 

Нет проблем сUIView, в случае UITableViewя могу видеть нижние закругленные углы в нижней части, которые я хочу достичь, но после этого UITableViewначинает прокручивать не его содержание.

Обычно содержимое UITableViewсвитков но после применения этого UITableViewначинается прокрутка, может быть фон UITableViewпрокрутки.

1 ответ

  1. Переопределение слоя маски изменения tableView его свойства tableViewWrapper и что вводит странное поведение, поэтому для решения этой проблемы нам нужно добавить представление контейнера и реализовать нашу маскировку:

    @interface ViewController ()<UITableViewDelegate, UITableViewDataSource>
    
    @property (weak, nonatomic) IBOutlet UIView *container;
    @property (weak, nonatomic) IBOutlet UITableView *testTable;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    
        CAShapeLayer * maskLayer = [CAShapeLayer layer];
        // manually configuring the mask rect will be the best way to set it rather than setting it in viewDidLayoutSubviews or viewDidAppear that can be called again when view is dismissed or popback.
        CGRect rect = CGRectMake(0, 40, [UIScreen mainScreen].bounds.size.width - 40, [UIScreen mainScreen].bounds.size.height - 204);
    
        maskLayer.path = [UIBezierPath bezierPathWithRoundedRect: rect byRoundingCorners: UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii: (CGSize){10.0, 10.}].CGPath;
    
        self.container.layer.mask = maskLayer;
        self.container.clipsToBounds = YES;
    
    }
    
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
        return 15;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    
        cell.textLabel.text = [NSString stringWithFormat:@"%ld", (long)indexPath.row];
    
        return cell;
    }
    
    @end