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

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

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

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

спасибо!

8 ответов


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

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.


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

С

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

Свифт

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

Cornered UISegmentedControl


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


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

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

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

обновлено для совместимости 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

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

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

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

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

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

это преобразованный и рабочий код для Swift 4.1 и Xcode 9.3 of Яков это!--5-->.

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