sectionIndexTitlesForTableView中的字母之间的间距,空对象技巧不再起作用了吗?

use*_*929 2 objective-c uitableview ios

我正在尝试在字母之间添加空格sectionIndexTitlesForTableView以获取所有屏幕高度.我找到了这个方法:

iOS 7上的UITableView部分索引间距

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

这是我的实现(我只想在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];

    }

}
Run Code Online (Sandbox Code Playgroud)

编辑

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

Sto*_*nz2 6

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

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

36节标题

但是,如果你只包含一行,它会将标题隐藏/组合成"点".尽管这些点中的一些代表单个项目,但它们被放置在整个行中.我的猜测是Apple认为如果他们只将中间的两个物体与一个点组合在一起就会显得很奇怪.这是同一张桌子,但有37个章节标题:

37节标题

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

所以,为了回答你的问题,"空白"或"空项目"技巧仍然有效,但前提是你的真实物品+空物品加起来<= 36.


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

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

TL;博士:

第三个选项,以及我建议的选项,就是接受完整的字母表.它占据了绝大部分垂直空间,并且与其他应用程序显示此控件的方式更加一致.另外,您不必覆盖tableView:sectionForSectionIndexTitle:atIndex:.而且您不必为不同的屏幕尺寸返回不同的标题.

在此输入图像描述