【问题标题】:Spacing between letter in sectionIndexTitlesForTableView, the empty object trick not working anymore?sectionIndexTitlesForTableView 中字母之间的间距,空对象技巧不再起作用?
【发布时间】:2014-09-15 17:00:21
【问题描述】:

我正在尝试在sectionIndexTitlesForTableView 中的字母之间添加空格以占据所有屏幕高度。我找到了这个方法:

UITableView section index spacing on iOS 7

但它不起作用。有什么变化吗?

这是我的实现(我只想在 iPhone 5 上实现):

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {


    float ScreenHeight=[[UIScreen mainScreen] bounds].size.height;
    if (ScreenHeight==568) {

        return[NSArray arrayWithObjects:@"A",@" ", @"B",@" ", @"C",@" ", @"D",@" ", @"E",@" ", @"F",@" ", @"G",@" ", @"H",@" ", @"I",@" ", @"J",@" ", @"K",@" ", @"L",@" ", @"M",@" ", @"N",@" ", @"O",@" ", @"P",@" ", @"Q",@" ", @"R",@" ", @"S",@" ", @"T",@" ", @"U",@" ", @"V",@" ", @"W",@" ", @"X",@" ", @"Y",@" ", @"Z", nil];
    }
    else {
        return[NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", nil];

    }

}

编辑

每个字母添加一个空对象会创建一个“合成 sectionIndexTitlesForTableView 视图”,并非所有字母都显示在右侧,但只有一个人。我认为这是太长列表的默认行为...无论如何,如果我删除一些空对象(例如,我只删除数组中的最后 5 个空对象),“合成视图”会消失,但 sectionIndexTitlesForTableView 中的字母间距不要改变(与我在没有空对象的数组中的间距相同),即使在 A 和 B 之间我留下了一个空对象。

【问题讨论】:

  • 定义“它不起作用”。你的标题不显示吗?它们根本没有间隔吗?它们的间距不够吗?索引是否未正确映射到部分?代码会融化你的手机并召唤克苏鲁吗? “它不起作用”不是可解决的错误。
  • 我已经更新了我的问题@Stonz2

标签: ios objective-c uitableview


【解决方案1】:

问题是在 iOS7 的 4 英寸 iPhone 屏幕上,带有导航栏的全屏表格视图的部分索引标题中可以存在的最大对象数为 36。除此之外,它们将不适合,它们将开始“组合”成您可能会看到的点。这可以通过几个屏幕截图很容易地显示出来:

36 个项目将占据整个屏幕的高度:

但是,如果您只包含一行,它会将标题隐藏/组合成“点”。尽管其中一些点代表单个项目,但它们被放置在整条线上。我的猜测是,Apple 认为如果他们只将中间的两个对象与一个点结合起来会看起来很奇怪。这是同一张表,但有 37 个章节标题:

即使第 37 项不会导致它使用整个屏幕高度(因为您的空白不占用与字母一样多的垂直空间),操作系统仍会将它们组合起来,因为它假定第 37 项不会适合。

所以,要回答您的问题,“空白”或“空项目”技巧仍然有效,但前提是您的真实项目 + 空项目加起来


至于如何“纠正”这个问题,你的选择是有限的。您可以在整个字母表中间隔放置 10 个或更少的空对象以最大化空间,但这看起来很奇怪(一些字母会被分组,然后是一个空格,然后是一个组,一个空格等)并且会更加困难当用户实际点击部分索引标题之一时进行处理。

另一种选择是增加索引标题的字体大小,其中一位海报在您在问题中链接的帖子的答案中提出了建议。根据它的完成方式以及需要调用该方法的次数,这似乎令人难以置信。

tl;博士:

第三个选项,以及我建议的选项,将是按原样接受完整的字母表。它已经占据了绝大多数垂直空间,并且将更符合其他应用程序显示此控件的方式。另外,您不必覆盖tableView:sectionForSectionIndexTitle:atIndex:。而且您不必为不同的屏幕尺寸返回不同的标题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    相关资源
    最近更新 更多