2013-02-20 19 views
6

Tôi đang cố gắng để các góc của UITextView được che bằng các góc bo tròn của nhóm UITableViewCell có chứa nó. Dưới đây là một ảnh chụp màn hình của tế bào vì nó hiện đang đứngclipToBounds và mặt nạĐối tượng được nhóm theo UITableViewCell

UITextView inside grouped UITableViewCell

Dưới đây là một số mã tôi đang sử dụng để cố gắng ngăn chặn các góc từ chồng chéo các tế bào biên giới của tôi. Tôi đã thử cả

cell.contentView.layer.masksToBounds = YES; 
cell.layer.masksToBounds = YES; //tried this as a test, still doesn't work 
detailTextView.clipsToBounds = YES; 
[cell.contentView addSubview:detailTextView]; 

cell.layer.masksToBounds = YES; 
cell.contentView.layer.masksToBounds = YES; 
detailTextView.clipsToBounds = YES; 
[cell addSubview:detailTextView]; 

này rõ ràng không làm việc, tôi thiếu gì?

+0

bạn đã thử 'cell.clipsToBounds = YES;'? – Patrick

+0

Có nhưng đó không phải là những gì tôi cần. 'clipsToBounds' có nghĩa là ô sẽ ẩn các phần của lớp nằm bên ngoài cha mẹ của nó. Tôi muốn 'UITextView' ẩn các phần của lớp ngoài cha mẹ của nó (các ô contentView/chính ô đó) – conorgriffin

+1

các giới hạn của contentView của bạn lớn hơn giới hạn của ô của bạn để cắt bớt contentview sẽ không giải quyết được vấn đề của bạn - bạn phải bấm vào ô – Pfitz

Trả lời

0

Tôi khá chắc chắn rằng bạn không thể che dấu các góc theo cách này. Hình ảnh backgroundView của ô là hình ảnh cho một nhóm UITableView do đó không có ý nghĩa về mặt nạ.

Một giải pháp khả thi cho vấn đề là tự làm tròn các góc. Đây là một chút khó khăn vì bạn chỉ muốn làm tròn các góc trên cùng của ô trên cùng và các góc dưới cùng của ô dưới cùng. May mắn thay, @lomanf đã đăng một giải pháp tuyệt vời để làm tròn các góc tùy ý tại đây: Round two corners in UIView. Sử dụng phương pháp MTDContextCreateRoundedMask của mình, chúng ta có thể đạt được mục tiêu của mình.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Other cell instantiation 

    // First cell in section 
    if (indexPath.row == 0) { 
     [self roundTopOrBottomCornersOfCell:cell top:YES];  
    } 
    // Last cell in section 
    else if (indexPath.row == tableView.numberOfRowsInSection:indexPath.section-1) { 
     [self roundTopOrBottomCornersOfCell:cell top:NO]; 
    } 
} 

// Modified from the second part of @lomanf's Solution 1 
- (void)roundTopOrBottomCornersOfCell:(UITableViewCell*)cell top:(BOOL)top { 
     // Set constant radius 
     CGFloat radius = 5.0; 

     // Create the mask image you need calling @lomanf's function 
     UIImage* mask; 
     if (top) { 
      mask = MTDContextCreateRoundedMask(self.view.bounds, radius, radius, 0.0, 0.0); 
     } 
     else { 
      mask = MTDContextCreateRoundedMask(self.view.bounds, 0.0, 0.0, radius, radius); 
     } 

     // Create a new layer that will work as a mask 
     CALayer* layerMask = [CALayer layer];    
     layerMask.frame = cell.bounds; 

     // Put the mask image as content of the layer 
     layerMask.contents = (id)mask.CGImage; 

     // Set the mask layer as mask of the view layer 
     cell.layer.mask = layerMask; 
}   
0

Cùng một vấn đề xảy ra với tôi

Sự khác biệt là tôi đang sử dụng phong cách đơn giản và tôi đang cố gắng để làm cho mọi tế bào với góc tròn. Cuối cùng, tôi đã làm cho nó, đây là cách của tôi:

1. đặt mã này trong tùy chỉnh của bạn phương pháp awakeFromNib tableViewCell của

[cell.layer setMasksToBounds:YES]; 
    [cell.layer setCornerRadius:5.0]; 

2. thiết lập màu nền tùy chỉnh TableViewCell của contentView của bạn để màu trắng, sau đó thiết lập màu backgroung của tableView của bạn để xóa màu. Đó là tất cả.