PS: Tôi có thể đăng một video nhỏ nhưng có vẻ như không cần thiết.Dấu phân cách UITableView nhấp nháy trong khi chuyển đổi ứng dụng
Tạo dự án mẫu bằng Xcode 6.4 (hiện đang sử dụng 6E35b
). Tạo một lớp con UITableViewController đơn giản và hiển thị nó bằng cách sử dụng bảng phân cảnh hoặc lập trình.
Thử chuyển đổi ứng dụng. Dường như bộ phân tách xem bảng bất cứ khi nào ứng dụng chạy ở chế độ nền hoặc nền trước. Nó không Flickr trong khi di chuyển, vv
Để xem nó tốt hơn, sử dụng:
self.tableView.backgroundColor = [UIColor whiteColor];
self.tableView.rowHeight = 75.0f
self.tableView.separatorColor = self.view.tintColor;
Tôi không chắc chắn lý do tại sao điều này xảy ra. Tôi đã gọi iPhone 6/6 Plus: UITableView separator flickering and different thickness nhưng các dự án mặc định luôn có tệp IB màn hình khởi chạy.
Bạn có thể thấy sự cố trong ứng dụng cài đặt mặc định trên iOS. Đối với hầu hết các phần, điều này không trở thành một vấn đề, trừ khi bạn đang dựng hình ảnh và đột nhiên các dòng phân cách trắng flickr.
EDIT 1: Vấn đề lớn nhất đối với tôi là ngay cả khi tôi sử dụng:
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
tách được trả lại trong giây lát và sau đó biến mất; chính xác giống như trong các trường hợp khác. Xem CHỈNH SỬA 2 để biết thêm chi tiết.
EDIT 2 (07/04/15, 8.46PM): Tôi muốn cung cấp thêm một số ví dụ tại đây. Hành vi nhấp nháy mà tôi đang quan sát nổi bật hơn nhiều với các ô xem bảng tùy chỉnh (nghĩa là nơi bạn có quyền tự do hiển thị chế độ xem hình ảnh của riêng mình với cài đặt thuộc tính tùy chỉnh, v.v.).
Quan sát khác là hành vi nhấp nháy cụ thể (ví dụ: trong trường hợp separatorStyle == UITableViewCellSeparatorStyleNone
) không đáng chú ý với các ô chỉ văn bản. Nó là chủ yếu đáng chú ý trong trường hợp hình ảnh được trả lại trong các ô xem bảng.
Dưới đây là một ví dụ của một tế bào xem bảng:
@interface BTableViewCell() @property (nonatomic, strong, readwrite) UIImageView *mainImageView; @end @implementation BTableViewCell - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { [self commonInit]; } return self; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { [self commonInit]; } return self; } - (void)commonInit { // Initialize Avatar Image self.mainImageView = [[UIImageView alloc] init]; _mainImageView.translatesAutoresizingMaskIntoConstraints = NO; _mainImageView.layer.masksToBounds = YES; [self.contentView addSubview:_mainImageView]; [self configureConstraintsForImageView]; } - (void)configureConstraintsForImageView { [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:_mainImageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeHeight multiplier:1 constant:0]]; [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:_mainImageView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]]; } @end - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { BTableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"]; NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpeg"]; UIImage* image = [UIImage imageWithContentsOfFile:imagePath]; cell.mainImageView.image = image; //ignore unoptimized load return cell; }
Các nhấp nháy gần như biến mất nếu
masksToBounds
tài sản làfalse
. Tôi không chắc chắn lý do tại sao đây là trường hợp hoặc nếu đây là cách dự định.Thay vì sử dụng ô xem bảng tùy chỉnh, hãy sử dụng lớp
UITableViewCell
mặc định.- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"]; NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpeg"]; UIImage* image = [UIImage imageWithContentsOfFile:imagePath]; cell.backgroundView = [[UIImageView alloc] initWithImage:image]; return cell; }
Đó là cần lưu ý rằng các hành vi leo lét cho # 2 và # 3 là nhiều hơn hoặc ít hơn như nhau. Nó tinh tế hơn nhiều so với một trong số # 1, nhưng vẫn đáng chú ý.
tôi đã không điều tra vấn đề này triệt để chưa nhưng những ảnh hưởng nhấp nháy trong dải phân cách rất gợi nhớ đến một vấn đề tôi gặp phải với UISegmentedControl. Có thể cuộc trò chuyện SO đó sẽ giúp bạn: http://stackoverflow.com/questions/18894772/uisegmentedcontrol-in-ios-7-divider-image-is-wrong-during-animation/20654744#20654744 – Lobsterman