Хорошо, чтобы сэкономить другим людям несколько часов работы .... Я тщательно протестировал различные шрифты, размеры и поля, сравнивая их с дампом иерархии UIView фактического табличного представления с индексом, чтобы прийти к этому методу, который вернет ширину индекса таблицы, так что границы содержимого ячейки табличного представления можно рассчитать как table_width - index_width. Я укажу, что часто есть дополнительное количество в 20 пикселей справа, зарезервированное для дополнительного вида.
Я также обнаружил, что cell.contentView.bounds НЕ устанавливается правильно, пока не будут вызваны методы AFTER cellForRowAtIndexPath и willDisplayCell, поэтому попытка получить значение во время этих вызовов обречена на неудачу. Он устанавливается правильно ко времени вызова viewDidAppear.
Я понятия не имею, как рассчитать ширину индекса, если язык устройства установлен для неанглийского алфавита.
- (CGFloat) getMaxIndexViewWidth
{
CGFloat indexMargin = 21.0;
NSArray *sectionTitles = [self sectionIndexTitlesForTableView:nil]; //NOTE -- if multiple tables, pass real one in
CGFloat maxWidth11 = CGFLOAT_MIN;
for(NSString *title in sectionTitles)
{
CGFloat titleWidth11 = [title sizeWithFont:[UIFont fontWithName:@"Helvetica-Bold" size:11.0f]].width;
maxWidth11 = MAX(maxWidth11, titleWidth11);
}
return maxWidth11+indexMargin;
}