当前位置: 首页 > 知识库问答 >
问题:

如何模仿UITableView iOS7默认的行分隔符样式?

蒋波光
2023-03-14

我有一个自定义UITableViewCell,我想在其中绘制一个垂直分隔符,类似于iOS7中默认的水平分隔符。当前,我在配置单元格时使用此代码:

UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(cell.contentView.bounds.size.width - rightButtonWidth, 0, 1, cell.contentView.bounds.size.height)];
lineView.backgroundColor = [UIColor lightGrayColor];
lineView.autoresizingMask = 0x3f;
[cell.contentView addSubview:lineView];

如图所示,默认分隔符以1像素高度渲染,而我的分隔符以2像素宽渲染。我试着将宽度设置为0.5点,但是这条线根本没有被渲染。

此外,颜色是关闭的,显然不是light GrayColor。在UIColor中是否有匹配的颜色常数?编辑:颜色是RGB207,207,210似乎没有在UIColor. h中列出。

共有3个答案

芮念
2023-03-14

如果您使用自定义UITableViewCells,则可以通过其.xib执行此操作。只需添加一个具有所需颜色的UIView,将其设置为一个像素,并将其放置在所需的位置。无需以编程方式进行。

在代码段中,应添加以下行:

lineView.clipsToBounds = YES;
宓英哲
2023-03-14

像@danypata一样,子类工作正常,但我的情况是快速简单地修复存在的代码。或者,

- (CGFloat)defaultOnePixelConversion
{
     return 1.f / [UIScreen mainScreen].scale;
}

然后直接应用到线视图。

UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, /*1*/[self defaultOnePixelConversion], height);

结果与默认的UITableView的分隔符差别不大。

赵俊远
2023-03-14

您的问题是,如果宽度设置为1px,视图在视网膜上的宽度将为2px。我建议创建UIView的子类,我们称之为CustomDivider,在-layoutsubview中,您将执行以下操作:

-(void)layoutSubviews {
    [super layoutSubviews];
    if([self.constraints count] == 0) {
        CGFloat width = self.frame.size.width;
        CGFloat height = self.frame.size.height;
        if(width == 1) {
            width = width / [UIScreen mainScreen].scale;
        }
        if (height == 0) {
            height = 1 / [UIScreen mainScreen].scale;
        }

        if(height == 1) {
            height = height / [UIScreen mainScreen].scale;
        }
        self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, width, height);
    }
    else {
        for(NSLayoutConstraint *constraint in self.constraints) {
            if((constraint.firstAttribute == NSLayoutAttributeWidth || constraint.firstAttribute == NSLayoutAttributeHeight) && constraint.constant == 1) {
                constraint.constant /=[UIScreen mainScreen].scale;
            }
        }
    }
}

上面的代码片段将检查哪个维度(宽度或高度)小于或等于1,并根据屏幕分辨率调整其大小。此外,此代码将与autolayout(已测试)一起使用。

这种方法将从IB和代码中工作。

 类似资料:
  • 问题内容: 很抱歉,这个愚蠢的问题已被搜索,但不确定是否找到了正确的答案,因此默认分隔符仅是awk的空间? 问题答案: 这是适用于 所有主要Awk实现* 的 实用摘要 : * GNU awk中() -默认在 一些 Linux发行版 Mawk () -默认在 一些 Linux发行版(例如,早期版本的Ubuntu的crysman报道称,版本19.04现在带有 GNU awk中-见下面他的评论) BSD

  • 尽管已将pcs区域分隔符更改为“.”Netbeans 12仍在使用“,”。我已经尝试将以下内容添加到netbeans中。conf文件,但它不起作用: -J-Duser.language=en-J-Duser.country=US 如何通过conf文件强制netbeans使用特定的本地文件?

  • 我正在编写一个应用程序,并使用建立客户端呼叫到外部服务。我有定制的编码器和解码器,我正在注册像这样: 我正在为客户机调用编写单元测试,这样我就可以观察feign机器如何处理编码器/解码器覆盖和异常气泡。我现在对用假服务器编写集成测试不感兴趣(这是我看到人们为这种情况编写的最常见的测试类型)。 这应该是直截了当的。我想模拟发出请求的时间点,让它返回我的假响应。这意味着我应该模拟调用,这样当它向这个呼

  • 有没有办法在gridview中显示行之间的(水平)分隔线? 我试着在每个网格项目下面放置一个小的分隔线,但是这不是一个解决方案,因为当一行没有完全填满项目时,它不会跨越整行。 有没有办法在每一行之间添加一个图像?我只能找到改变行之间空间的方法。

  • 我将立即承认我是一个java开发人员,正在寻找一个类似于DecimalFormat的函数,类似于: 代码改编自Oracle javase i18n 我能找到的与此相关的每个资源要么只是格式化(而不是解析) 如何为Angular 4中的数字管道指定千位分隔符 NativeScript:格式化数字类型脚本 或者人们使用正则表达式替换(这在我看来很疯狂) 如何将带有逗号千分隔符的字符串解析为数字? 或一

  • 本文向大家介绍如何在JavaFX中使用CSS设置分隔符的样式?,包括了如何在JavaFX中使用CSS设置分隔符的样式?的使用技巧和注意事项,需要的朋友参考一下 分隔符是水平或垂直线,用于分隔应用程序的UI元素。在JavaFX中,javafx.scene.control.Separator类代表一个分隔符,要创建一个分隔符,您需要实例化该类。您可以使用CSS控制分隔符的外观。 通过创建CSS文件并在