UISegmentedControl с квадратными углами - PullRequest
20 голосов
/ 12 октября 2011

Я хотел бы изменить UISegmentedControl с подклассом, чтобы удалить закругленные углы. Я не могу установить угол Radius. Делать SegmentedControl шире экрана (и, следовательно, «отрубать» углы) не вариант, так как у меня 4 или 5 сегментов, и они будут различаться по размеру.

Есть ли способ сделать это?

Спасибо

Ответы [ 5 ]

35 голосов
/ 25 февраля 2015

Чтобы сделать угловой квадрат, используйте следующий код:

segmentContrl.layer.borderColor=*anycolor*.CGColor;
segmentContrl.layer.cornerRadius = 0.0;
segmentContrl.layer.borderWidth = 1.5f;
15 голосов
/ 12 октября 2011

Один вариант, если «обрезка» части первого и последнего сегмента проблематична, может заключаться в обрезке всего первого и последнего сегмента (который вы сделали фиктивными неиспользованными сегментами). Таким образом, вы можете сохранить общий размер для каждого сегмента.

11 голосов
/ 27 ноября 2013

Просто используйте встроенные методы настройки и установите фоновое изображение для каждого состояния сегмента.Это полностью заменит границу.Если фоновые изображения квадратные, то ваш сегментированный элемент управления будет квадратным.Используйте следующий код для каждого состояния сегмента, которое вы хотите настроить.

[segmentedControl setBackgroundImage:[UIImage imageNamed:@"square-background-image-selected"] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

9 голосов
/ 12 октября 2011

Вы можете установить ширину сегментов (используя setWidth: forSegmentAtIndex: ), чтобы вы могли легко сделать левый и правый конечные сегменты больше (скажем, на 10 пикселей больше), чем другие, и затем вы можете обрезать 10px с обоих концов и имеют квадратные углы. Вам не нужно делать его больше ширины экрана, вместо этого поместите его в UIView и используйте его для обрезки концов.

С другой стороны, можно просто создать собственный сегментированный элемент управления, используя набор пользовательских кнопок UIBontrol внутри UIControl.

5 голосов
/ 02 января 2013

Еще одна альтернатива для достижения этой цели в конструкторе интерфейсов:

Перетащите объект UIView в свой UIViewController, это может быть подпредставление вашего UIView.

Перетащите UISegmentedControl как подпредставление вашего UIView. Сегментированный элемент управления теперь должен иметь отступ в вашем списке объектов UIViewController. (см. скриншот ниже).

Измените размер SegementedControl так, чтобы его рамка выходила за границы вашего объекта UIView. В моем случае я установил для кадра SegementedControl значение X = -10 и добавил +20 к ширине SegementedControl, чтобы общая ширина сегментированного элемента управления была на 20 больше, чем у объекта UIView. (надеюсь, скриншот ниже помогает).

Я также настроил следующие параметры для объекта UIView и SegmentedControl: UIView: проверьте Clip SubViews, снимите флажок AutoResize Subviews. SegementedControl: снимите флажок «Клипировать подвиды», снимите флажок «Авторазбирать подпредставления».

enter image description here

...