it-swarm.com.ru

Как изменить угловой радиус UISegmentedControl?

Можно ли изменить угловой радиус UISegmentedControl? Я попробовал следующий подход, который мы используем для изменения радиуса угла UIView.

    self.segmentedControl.layer.cornerRadius = 15.0;
    self.segmentedControl.layer.masksToBounds = YES;

Это не сработало, поскольку вы можете видеть, что оно только обрезает угол UISegmentedControl . enter image description here

Спасибо!

29
wz366

Это должно работать:

self.segmentedControl.layer.cornerRadius = 15.0;
self.segmentedControl.layer.borderColor = [UIColor whiteColor].CGColor;
self.segmentedControl.layer.borderWidth = 1.0f;
self.segmentedControl.layer.masksToBounds = YES;

Вам нужно указать границу после установки cornerRadius.

86
xi.lin

Вставьте UISegmentedControl в UIView и установите радиус угла для UIView.

Objective-C

outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds) / 2;
outerView.layer.borderColor = [UIColor blueColor].CGColor;
outerView.layer.borderWidth = 1;

Swift

outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds) / 2
outerView.layer.borderColor = UIColor.blueColor().CGColor
outerView.layer.borderWidth = 1

 Cornered UISegmentedControl

32
Yakiv Kovalsky

Сегментированный элемент управления не изменит способ рисования своих углов, поэтому он продолжает рисовать свои углы по-своему, а затем вы их обрезаете. Вы не отвечаете за то, как сегментированный элемент управления рисует свою границу. Если вам действительно не нравится, как он нарисован, вам придется придумать свой собственный альтернативный элемент управления с нуля. Самое близкое, на что вы можете легитимно прийти к тому, что вы пытаетесь сделать, - это установить фоновое изображение сегментированного элемента управления.

9
matt

Обновлен для совместимости Swift 3 и Xcode 8.2

    mySegmentedControl.layer.cornerRadius = 25.0
    mySegmentedControl.layer.borderColor = UIColor.white.cgColor
    mySegmentedControl.layer.borderWidth = 1.0
    mySegmentedControl.layer.masksToBounds = true
4
deijmaster

Ваш результат, потому что что-то другое (пользовательский рисунок?) Контролирует границу, а не слой. К счастью, кажется, что настройки этого слоя имеют приоритет.

Если вы знаете, какой цвет рамки вам нужен, вы можете просто добавить (пример):

self.segmentedControl.layer.borderColor = [UIColor whiteColor].CGColor;
self.segmentedControl.layer.borderWidth = 1.0;
4
Mihai Timar

Предыдущие решения никогда не работали для меня. Мое решение:

Чтобы встроить UISegmentedControl в суперпредставление, затем присвойте -1 ограничениям, ведущим, конечным, нижним, верхним, чтобы отрезать границу UISegmentedControl. Наконец, суперпредставление должно быть настроено следующим образом:

segmentedControl.superview.clipsToBounds = true
segmentedControl.superview.layer.cornerRadius = 0 //whatever
segmentedControl.superview.layer.borderWidth = 1
segmentedControl.superview.layer.borderColor = segmentedControl.tintColor.CGColor
3
Andrea Mugnaini

Это преобразованный и рабочий код для Swift 4.1 и Xcode 9.3 из сообщения Якова .

segmentedOuterView.layer.cornerRadius = segmentedOuterView.bounds.height / 2
segmentedOuterView.layer.borderColor = UIColor.red.cgColor
segmentedOuterView.layer.borderWidth = 1
segmentedOuterView.layer.masksToBounds = true
2
atereshkov

Используйте следующий код: 

segmentContrl.layer.borderColor=*anycolor*.CGColor;
segmentContrl.layer.cornerRadius = 0.0;
segmentContrl.layer.borderWidth = 1.5f;
1
swathy krishnan