Điều này có vẻ như là một vấn đề dễ dàng, nhưng tôi đã trúng một bức tường gạch ... Tìm kiếm đang làm cho một UITableView sử dụng UITableViewStyleGrouped, và tôi nhìn thấy một (1 pixel) dòng trắng nhỏ giữa hàng đầu tiên và thứ hai của mỗi phần của view bàn của tôi (xem hình)Khoảng cách 1 pixel giữa ô thứ nhất và ô thứ hai trong nhóm UITableView
dường như lý do cho dòng này là ô đầu tiên trong mỗi phần cao hơn 1 pixel so với các phần khác. Khi tôi đặt ô ban đầu của mỗi nhóm là 29 pixel cao (những người khác là 30) khoảng cách biến mất và tất cả là tốt.
Trong khi giải pháp này là thành công, tôi muốn biết lý do cho điều này xảy ra vì vậy tôi có thể tránh sử dụng một hack lộn xộn.
FYI:
- Tôi đã thực hiện chắc chắn đây không phải là một vấn đề với những hình ảnh nền Tôi có bằng cách sử dụng - họ là tất cả 30px cao, và tôi đã thay thế hình ảnh đầu với một hình ảnh trung với cùng kết quả.
- Tôi đã gỡ bỏ tất cả các biên giới giữa các tế bào bằng cách thiết lập separatorStyle = UITableViewCellSeparatorStyleNone
- Hiệu ứng này không xảy ra trên UITableViewStylePlain
Any help is appreciated rất nhiều.
Cảm ơn
Mã cho thiết lập bảng:
myTable = [[UITableView alloc] initWithFrame:CGRectMake(TABLE_SHIFT_OFFSET,
DATE_SLIDER_HEIGHT - DATE_SLIDER_SHADOW_HEIGHT,
326,
self.view.frame.size.height - DATE_SLIDER_HEIGHT + DATE_SLIDER_SHADOW_HEIGHT) style:UITableViewStyleGrouped];
myTable.backgroundColor = [UIColor clearColor];
myTable.backgroundView = nil;
myTable.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.view addSubview:myTable];
myTable.dataSource = self;
myTable.delegate = self;
Mã cho thiết lập tế bào:
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// This is a hack to make sure that a white line doesnt appear between the
// first and second rows in the table, which happens for reasons I dont understand
if (indexPath.row == 0) {
return 29;
}
return 30;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"satCell"];
if (!cell)
{
cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"satCell"];
}
cell.backgroundView = nil;
cell.backgroundView = [[UIView alloc] initWithFrame:CGRectZero];
cell.backgroundColor = [UIColor whiteColor];
int numberOfRowsInThisSection = [self tableView:tableView numberOfRowsInSection:indexPath.section];
if (numberOfRowsInThisSection == 1)
{
cell.backingImage = self.singleWhite;
}
else if (indexPath.row == 0)
{
cell.backingImage = self.topWhite;
}
else if (indexPath.row % 2 == 0)
{
// Even row
if (indexPath.row == numberOfRowsInThisSection - 1)
{
// Last row (even)
cell.backingImage = self.botWhite;
}
else
{
// Normal row (even)
cell.backingImage = self.midWhite;
}
}
else if (indexPath.row % 2 == 1)
{
// Odd row
if (indexPath.row == numberOfRowsInThisSection - 1)
{
// Last row (even)
cell.backingImage = self.botDark;
}
else
{
// Normal row (odd)
cell.backingImage = self.midDark;
}
}
// Setup cell text [REMOVED FOR BREVITY]
return cell;
}
Mã cho thiết lập các hình ảnh ủng hộ trong vòng MyTableViewCell:
- (void)setBackingImage:(UIImage *)backingImage
{
if (self.backingImage != backingImage)
{
_backingImage = nil;
_backingImage = backingImage;
self.backingView.image = backingImage;
}
}
self.backingView được thiết lập bằng cách sử dụng mã sau:
[[UIImageView alloc] initWithFrame:CGRectMake(7, 0, 307, 30)];
Chúng tôi có thể xem một số mã không? Bạn có bất cứ điều gì đang xảy ra trong heightForRowAtIndexPath :? –
Mã có liên quan đến chế độ xem ô sẽ đẹp. Chế độ xem nào trong ô là bạn thêm chế độ xem, chính ô đó, contentView hoặc backgroundView? Bạn thêm hình ảnh của riêng mình có đường viền? Tôi đã làm một số xét nghiệm và tôi nghĩ rằng phong cách phân cách suy nghĩ không hoạt động với các bảng được nhóm, chúng luôn thu hút dấu phân cách. –
Tôi đã thêm tất cả các mã tôi có thể nghĩ rằng có thể ảnh hưởng đến cấu trúc bảng. Tôi rất sẵn lòng thêm bất kỳ thứ gì khác nếu được yêu cầu ... PS. Các hack trong heightForRowAtIndexPath: là workaround hiện tại của tôi. Nếu hack bị xóa, khoảng cách xuất hiện lại – sleeke