iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 是否可以在不创建虚拟行的情况下更改UITableView中占位符行的高度?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
TableView中最后一行之外的行高(如果项目数小于TableView可以一次显示的行数,那么只有视觉详细信息的空占位符行)始终与最后一行高度相同.

是否可以改变这一点而不需要添加虚拟的最后一行?

解决方法

私有UITableView实例方法_spacingForExtraSeparators返回占位符行的高度.如果您没有为App Store编写应用程序,请覆盖它.它返回一个CGFloat.

这是一种与App Store兼容的不同方法(据我所知),并且可能比创建虚拟行更容易.

UITableView发送了很多layoutSubviews消息.每当它添加,删除或重新排列单元格时,无论何时滚动(也可能是其他时间),它都会执行此操作.因此,让我们覆盖layoutSubviews来绘制一个表视图的最后一部分的底部边缘开始的视图.视图将使用重复的图案填充,该图案看起来像占位符单元格,具有您定义的高度.

创建UITableView的子类.为您的子类提供UIView * _bottomView实例变量.我们需要覆盖layoutSubviews,因此我们将在该方法中懒惰地初始化_bottomView.

@implementation myTableView
{
    UIView *_bottomView;
}

覆盖layoutSubviews.你在layoutSubviews中做的第一件事就是调用[super layoutSubviews],这样你就可以继续一个正确的UITableView.

- (void)layoutSubviews
{
    [super layoutSubviews];

接下来你要做的就是懒洋洋地初始化_bottomView.

if (!_bottomView) {

你需要一个模式来填充_bottomView,它需要看起来像占位符单元格.创建一个1像素宽的图像上下文,并且您想要一个占位符单元格.用白色填充上下文,并在底部绘制分隔线(像素,真的).从上下文中获取图像.

UIGraphicsBeginImageContextWithOptions(CGSizeMake(1,placeholderHeight),YES,0);
        [[UIColor whiteColor] setFill];
        UIRectFill(CGRectMake(0,1,placeholderHeight));
        [self.separatorColor setFill];
        UIRectFill(CGRectMake(0,placeholderHeight - 1,1));
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

接下来,创建_bottomView,将其背景“颜色”设置为该图像作为重复模式,并将其作为子视图添加到您自己.

_bottomView = [[UIView alloc] initWithFrame:CGRectZero];
        _bottomView.opaque = YES;
        _bottomView.BACkgroundColor = [UIColor colorWithPatternImage:image];
        [self addSubview:_bottomView];
    } // end of if-block

最后,找到你上一节的矩形.使用该矩形计算从最后一节底部开始的_bottomView的框架,高度很高(两倍于你自己的高度绰绰有余),并且与最后一部分的rect一样宽.

int lastSectionIndex = [self.datasource numberOfSectionsInTableView:self] - 1;
    if (lastSectionIndex < 0)
        lastSectionIndex = 0;
    CGRect lastSectionRect = [self rectForSection:lastSectionIndex];
    CGRect bottomViewFrame = CGRectMake(lastSectionRect.origin.x,CGRectGetMaxY(lastSectionRect),lastSectionRect.size.width,self.bounds.size.height * 2);
    _bottomView.frame = bottomViewFrame;

最后,确保_bottomView是您最前面的子视图,因此它将过度绘制UITableView的占位符单元格.

[self bringSubviewToFront:_bottomView];
} // end of layoutSubviews

结束.

@end

大佬总结

以上是大佬教程为你收集整理的iphone – 是否可以在不创建虚拟行的情况下更改UITableView中占位符行的高度?全部内容,希望文章能够帮你解决iphone – 是否可以在不创建虚拟行的情况下更改UITableView中占位符行的高度?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。