2008-10-19 33 views
7

Vì lý do hiệu suất, tôi vẽ các chuỗi cho UITableViewCell trong chế độ xem tùy chỉnh ghi đè phương thức drawRect của nó để vẽ các chuỗi trực tiếp trong hình chữ nhật xem bằng cách sử dụng NSString: drawInRect. Điều này tương tự như ví dụ TableViewSuite của Apple 5-CustomTableViewCell.Làm thế nào để tạo UITableViewCell tùy chỉnh được rút kích thước chính xác?

Tuy nhiên, khi tôi gọi setEditing trên ô để hiển thị nút xóa, chế độ xem kết thúc bằng hình dạng được nén sau khi hoạt ảnh hoàn tất. Để chứng minh điều này, hãy gọi setEditing: YES trên ví dụ CustomTableViewCell được đề cập ở trên và quan sát sự biến dạng. Có cách nào xung quanh này hay tôi nên quay trở lại sử dụng UILabels cho văn bản của tôi?

Trả lời

5

Tôi gặp sự cố tương tự với UIView bên trong UITableViewCell. Tôi đã giải quyết nó bằng cách thay đổi số contentMode của UIView thành UIViewContentModeLeft. (Tôi đã viết nó lên here, với ảnh chụp màn hình.)

2

Tôi cũng gặp vấn đề này, và trong trường hợp của mình, tôi đã sửa nó bằng cách xử lý 2 trạng thái trong phương thức drawRect của tôi, một trong khi chỉnh sửa, cái còn lại thì không. Nói cách khác, tôi chiếm kích thước của nút xóa, và có giao diện người dùng của tôi để vẽ lại ô khác nhau. Tôi không chắc chắn nếu đó là cách hiệu quả nhất để đi, nhưng ở đây là mã mà tôi sử dụng để buộc một repaint:

-(void)_refreshTableAndCells{ 
    //refresh the table 
    [myCustomTableView reloadData]; 
    //refresh all the visible cells 
    for (UITableViewCell *cell in myCustomTableView.visibleCells){ 
     LocationCellView *locationCell = [cell.contentView.subviews objectAtIndex:0]; 
     [locationCell setNeedsDisplay]; 
    } 

} 

Tôi là một n00b Objective-C mặc dù, vì vậy tôi muốn có nhiều hạnh phúc hơn cho một ai đó để gợi ý một cách tốt hơn.

0

Thử đặt contentMode của chế độ xem tùy chỉnh của riêng bạn (nằm bên trong contentView của ô) thành UIViewContentModeLeft. "Ép" là do thực tế là contentMode mặc định là UIViewContentModeScaleToFill.

1

Tôi thường chỉ sửa đổi các giá trị x và chiều rộng (hoặc bất kỳ thứ gì khác) của bất kỳ thứ gì tôi muốn khác khi chỉnh sửa hay không. UITableView tự động gọi số layoutSubviews khi bạn bắt đầu chỉnh sửa, do đó bạn không phải lặp qua các ô của mình và tự mình thực hiện.

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    CGFloat editingPadding = 5.0; 
    self.textLabel = CGRectMake((self.editing ? self.textLabel.frame.origin.x + editingPadding : self.textLabel.frame.origin.x), self.textLabel.origin.y, (self.editing ? self.textLabel.frame.size.width - editingPadding : self.textLabel.frame.size.width), self.textLabel.frame.size.height); 
} 
Các vấn đề liên quan