PS:我可以发布一个小视频但似乎没必要。
使用Xcode 6.4创建一个示例项目(目前使用6E35b
)。创建一个简单的UITableViewController子类,并使用故事板或以编程方式呈现它。
尝试app切换。当应用程序进入后台或前台时,看起来tableview分隔符会闪烁。滚动等时不会闪烁
要更好地了解它,请使用:
self.tableView.backgroundColor = [UIColor whiteColor];
self.tableView.rowHeight = 75.0f
self.tableView.separatorColor = self.view.tintColor;
我不确定为什么会这样。我已经提到iPhone 6/6 Plus: UITableView separator flickering and different thickness但是默认项目总是有一个启动屏幕IB文件。
您可以在iOS上的默认设置应用中查看该问题。在大多数情况下,除非您正在渲染图像并且突然白色分隔线闪烁,否则这不会成为问题。
编辑1:对我来说最大的问题是,即使我使用:
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
分隔符暂时渲染然后消失;与其他情况完全相同。有关详细信息,请参阅编辑2 。
编辑2(2015年4月7日,下午8时16分):我想在此提供更多示例。我观察到的闪烁行为在自定义表格视图单元格中更为突出(即,您可以自由地使用自定义属性设置渲染自己的图像视图等)。
另一个观察结果是特定的闪烁行为(即在separatorStyle == UITableViewCellSeparatorStyleNone
)的情况下,仅文本单元格不明显。在图表视图单元格中呈现图像的情况下,它主要是值得注意的。
以下是表格视图单元格的示例:
@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;
}
如果masksToBounds
属性为false
,则闪烁几乎消失。我不确定为什么会出现这种情况,或者这是否是预期的方式。
不使用自定义表格视图单元格,而是使用默认的UITableViewCell
类。
- (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;
}
值得注意的是,#2 和#3 的闪烁行为或多或少相同。与#1 中的那个相比,它更加微妙,但仍然很明显。
答案 0 :(得分:1)
添加
Renders with edge antialiasing: YES
在您的app plist中
答案 1 :(得分:0)
我有一段时间遇到了同样的问题。我做了很长时间的研究,研究如何处理这个问题,从未找到有用的东西。我得出的结论是没有人注意到以及任何注意并不关心有关appswitch表视图的0.6f行的人。但是如果你仍然如此,我发现了一些解决方法。除了使用UITableViewCellSeparatorStyleNone
也做[self.tableView setSeparatorColor:[UIColor myColor]]
以及你可以做的最后一件事,如果你可以在像facebook ios app这样的单元格之间有间隙,那么将背景颜色设置为某种灰色。