Dum*_*oko 7 objective-c uitableview ios ios7
我从苹果公布了新的UI信息 - 没有帮助.
现在让代码和屏幕截图向您展示我遇到的问题.为了确保这不是我的错误代码,我创建了一个新项目,只有一个文件 - 一个内部有一个tableView的UIViewController.代表们已经确定.
我做以下事情:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 3;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 3;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"UITableViewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.textLabel.text = [NSString stringWithFormat:@"%d",indexPath.row];
// Configure the cell...
UIView * redView = [[UIView alloc] initWithFrame:CGRectMake(0, -10, 100, 20)];
redView.backgroundColor = [UIColor redColor];
[cell addSubview:redView];
return cell;
}
Run Code Online (Sandbox Code Playgroud)
表视图在Grouped上设置.让我们在iOS 6上运行它:
Duh ofcourse,Y起源是否定的!是的,它是,这是我想要实现的结果.让我们看看它在iOS 7上显示的内容:
提示:如果我们将redView添加到普通的UIView中,则不会发生这种情况.
另一个提示:如果我将tableView的背景颜色设置为蓝色,则各部分之间的灰线将为蓝色,而不是灰色(作为灰色不是设置标题的演示).另一个提示:同样适用于ipad.
为什么在iOS 7中它会削减一切超出范围的内容?请帮忙!
这是因为iOS 7引入了对UITableViewCells的视图层次结构的一些更改.
它曾经是UITableViewCell view -> contentView
.
现在更像是UITableViewCell view -> scrollView -> contentView
.
解决方案是clipsToBounds = NO
在scrollView上设置(默认情况下设置为YES).实现这一目标的方法是通过superview
财产.
因此,基本上在iOS6和之前,为了允许内容溢出单元格范围,您可以:
self.clipsToBounds = NO; //cell's view
self.contentView.clipsToBounds = NO; //contentView
Run Code Online (Sandbox Code Playgroud)
在iOS7中,您还必须防止滚动视图不被剪切,因此您可以执行以下操作:
self.clipsToBounds = NO; //cell's view
self.contentView.clipsToBounds = NO; //contentView
self.contentView.superview.clipsToBounds = NO; //scrollView
Run Code Online (Sandbox Code Playgroud)
我使用的向后兼容解决方案是:
self.clipsToBounds = NO;
self.contentView.clipsToBounds = NO;
if ([self.contentView.superview isKindOfClass:[NSClassFromString(@"UITableViewCellScrollView") class]]) self.contentView.superview.clipsToBounds = NO;
Run Code Online (Sandbox Code Playgroud)
请记住,这是Hacky™,如果在iOS 8中视图层次结构再次发生变化,您可能会遇到麻烦.不幸的是,似乎Apple不希望我们将内容从UITableViewCells中溢出,因此AFAIK这是唯一可行的解决方案.
以下内容将修复它:
cell.layer.masksToBounds = NO
然而,它可能会破坏其他东西,例如单元格动画。
您遇到的问题是由于单元格不支持将内容绘制到其边界之外(实际上,使用扩展其超级视图边界的子视图始终是一种黑客解决方案)。
最好的建议是重新设计并完全避免这种功能。
另一种解决方案可能是将相同的视图添加到前一个单元格的底部,或者直接将它们添加为子视图UITableView
。
归档时间: |
|
查看次数: |
9446 次 |
最近记录: |