Хитрость заключается в определении размера UISegmentedControl в соответствии с размером backgroundView
элемента управления, а не contentView
. Я смог сделать это программно, выполнив следующее:
// Size to cover the entire background
self.contentView.frame = self.backgroundView.frame;
self.myControl.frame = self.contentView.bounds;
Обратите внимание, что если вы используете аксессуар, вам также необходимо учитывать accessoryView
.
Причина в том, что иерархия представления выглядит следующим образом:
self
( UITableViewCell или подкласс)
backgroundView
contentView
accessoryView
В портретной раскладке кадр backgroundView
равен {{9, 0}, {302, 44}}
, тогда как кадр contentView
немного меньше и равен {{10, 1}, {300, 42}}
. Это дает ячейке ее 1px "границу", когда стиль таблицы сгруппирован. Вы должны изменить размеры элемента управления contentView
и , чтобы получить соответствующий размер.
(ПРИМЕЧАНИЕ. Хотя Apple на самом деле имеет несколько примеров UISegmentedControl в проекте примера кода UICatalog в SDK , они фактически "обманывают", используя a UIViewController и установка цвета фона основного представления на цвет фона таблицы.)