Як змінити кольори сегмента в UISegmentedControl в iOS 13?


109

A UISegmentedControlмає нову появу в iOS 13 та існуючий код для зміни кольорів сегментованого керування вже не працює, як це було.

До iOS 13 ви можете встановити те, tintColorщо буде використовуватися для межі навколо сегментованого елемента управління, ліній між сегментами та кольором тла вибраного сегмента. Тоді ви можете змінити колір заголовків кожного сегмента, використовуючи атрибут кольору переднього плану за допомогою titleTextAttributes.

В iOS 13 tintColorнічого не робить. Ви можете встановити сегментоване управління, backgroundColorщоб змінити загальний колір сегментованого елемента управління. Але я не можу знайти жодного способу змінити колір, використаний як фон вибраного сегмента. Налаштування текстових атрибутів все ще працює. Я навіть спробував встановити колір тла заголовка, але це впливає лише на фон заголовка, а не на решту кольорів фону вибраного сегмента.

Коротше кажучи, як ви змінюєте колір тла вибраного в даний час сегмента UISegmentedControliOS 13? Чи є правильне рішення, використовуючи загальнодоступні API, яке не потребує закопування в структуру приватного підгляду?

У iOS 13 немає нових властивостей для UISegmentedControlабо UIControlжодна зміна не UIViewє актуальною.

Відповіді:


134

Що стосується iOS 13b3, тепер selectedSegmentTintColorувімкнено UISegmentedControl.

Для зміни загального кольору сегментованого елемента керування використовуйте його backgroundColor.

Для зміни кольору вибраного сегмента використовуйте selectedSegmentTintColor.

Щоб змінити колір / шрифт невибраних заголовків сегментів, використовуйте setTitleTextAttributesстан .normal/ UIControlStateNormal.

Щоб змінити колір / шрифт вибраних заголовків сегмента, використовуйте setTitleTextAttributesстан .selected/ UIControlStateSelected.

Якщо ви створили сегментоване управління із зображеннями, якщо зображення створені у вигляді зображень шаблону, то сегментація елементів керування tintColorбуде використана для забарвлення зображень. Але в цьому є проблема. Якщо встановити такий tintColorже колір, як selectedSegmentTintColorтоді, зображення не буде видно у вибраному сегменті. Якщо ви встановите такий tintColorсамий колір, як backgroundColorі зображення на невибраних сегментах, видно не буде. Це означає, що ваше сегментоване управління із зображеннями повинно використовувати 3 різних кольори, щоб все було видно. Або ви можете використовувати не шаблонні зображення, а не встановлювати tintColor.

У програмі iOS 12 або новішої версії просто встановіть сегментовані елементи керування tintColorабо покладайтеся на загальний колір відтінку програми.


Як ми можемо встановити контролер сегмента без меж? Я не бачу налаштувань для цього в iOS 13. Раніше налаштування tintcolor було достатньо, щоб отримати контроль без полів сегмента.
Діпак Шарма

Будь ласка, додайте Колір кордону тощо, щоб усі могли знайти всі проблеми, пов’язані з кольором, тут вирішено. що кажуть? :)
Йогеш Патель

1
@YogeshPatel Що з кольором межі? У iOS 13 немає кольорів кордону, а в iOS 12 - це встановлений колір, tintColorякий вже висвітлено у відповіді.
rmaddy

@rmaddy Я встановив цей [segmentedControl.layer setBorderColor: [[UIColor whiteColor] CGColor]]; [segmentedControl.layer setBorderWidth: 0,5]; це надає мені колір кордону та меж в iOS 13.
Йогеш Патель

1
О, це межа. Це стосується будь-якого погляду, а не лише сегментаційного контролю. Це виходить за рамки оригінального питання та цієї відповіді. Вашого коментаря достатньо.
rmaddy

47

Станом на Xcode 11 beta 3

Зараз там знаходиться selectedSegmentTintColorмайно UISegmentedControl.

Дивіться відповідь rmaddy


Щоб повернути зовнішній вигляд iOS 12

Мені не вдалося відтінити колір вибраного сегмента, сподіваємось, він буде зафіксований у майбутній бета-версії.

Налаштування фонового зображення вибраного стану не працює без встановлення фонового зображення нормального стану (що видаляє всі стилі iOS 13)

Але мені вдалося повернути його до зовнішнього вигляду iOS 12 (або досить близько, я не зміг повернути радіус кута до його менших розмірів).

Це не ідеально, але яскраво-біле сегментоване управління виглядає трохи поза місцем у нашому додатку.

(Не усвідомлював, що UIImage(color:)це метод розширення в нашій кодовій базі. Але код для його реалізації є в Інтернеті)

extension UISegmentedControl {
    /// Tint color doesn't have any effect on iOS 13.
    func ensureiOS12Style() {
        if #available(iOS 13, *) {
            let tintColorImage = UIImage(color: tintColor)
            // Must set the background image for normal to something (even clear) else the rest won't work
            setBackgroundImage(UIImage(color: backgroundColor ?? .clear), for: .normal, barMetrics: .default)
            setBackgroundImage(tintColorImage, for: .selected, barMetrics: .default)
            setBackgroundImage(UIImage(color: tintColor.withAlphaComponent(0.2)), for: .highlighted, barMetrics: .default)
            setBackgroundImage(tintColorImage, for: [.highlighted, .selected], barMetrics: .default)
            setTitleTextAttributes([.foregroundColor: tintColor, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 13, weight: .regular)], for: .normal)
            setDividerImage(tintColorImage, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
            layer.borderWidth = 1
            layer.borderColor = tintColor.cgColor
        }
    }
}

Зображення, що показує дію вищевказаного коду


Це може бути вдалим рішенням. У мене ще не було можливості спробувати це, але чи вимагає цього також заклик, щоб setTitleTextAttributesзаголовки вибраного сегмента мали білий колір?
rmaddy

Гм, схоже, так і має, але, здається, ні. У мене немає доступу до цього атм для використання коду, але зображення зліва створюється з цим кодом.
Джонатан.

8
stackoverflow.com/a/33675160/5790492 для UIImage (розширення color :).
Нік Ков

1
Було б добре, якби ви додали розширення UIImage, таким чином, ваша відповідь не є повною iho
FredFlinstone

1
@VityaShurapov встановлює його, коли він виділяється і виділяється , це не масив станів, що передаються, а скоріше набір параметрів, що означає, що значення об'єднуються для створення нового стану.
Джонатан.

36

IOS 13 та Swift 5.0 (Xcode 11.0) 100-відсоткове управління сегментом

введіть тут опис зображення

введіть тут опис зображення

 if #available(iOS 13.0, *) {
      yoursegmentedControl.backgroundColor = UIColor.black
      yoursegmentedControl.layer.borderColor = UIColor.white.cgColor
      yoursegmentedControl.selectedSegmentTintColor = UIColor.white
      yoursegmentedControl.layer.borderWidth = 1

      let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]    
      yoursegmentedControl.setTitleTextAttributes(titleTextAttributes, for:.normal)

      let titleTextAttributes1 = [NSAttributedString.Key.foregroundColor: UIColor.black]
      yoursegmentedControl.setTitleTextAttributes(titleTextAttributes1, for:.selected)
  } else {
              // Fallback on earlier versions
}

7
ви намагалися встановити фон як білий? для мене це - сіруватий
Роніт,

@ItanHant, який xcode та швидку мову ви використовуєте?
Maulik Patel

@ Роні звичайно !! я спробую, але PLZ скажіть мені, який тип вихідного дисплея зараз
Maulik Patel

swift 5, xcode 11.3! він показує, що хоче! не той, кого я хочу :)
Ітан Гант,

15

Я спробував вирішити, і це прекрасно працює для мене. Ось версія Objective-C:

@interface UISegmentedControl (Common)
- (void)ensureiOS12Style;
@end
@implementation UISegmentedControl (Common)
- (void)ensureiOS12Style {
    // UISegmentedControl has changed in iOS 13 and setting the tint
    // color now has no effect.
    if (@available(iOS 13, *)) {
        UIColor *tintColor = [self tintColor];
        UIImage *tintColorImage = [self imageWithColor:tintColor];
        // Must set the background image for normal to something (even clear) else the rest won't work
        [self setBackgroundImage:[self imageWithColor:self.backgroundColor ? self.backgroundColor : [UIColor clearColor]] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        [self setBackgroundImage:tintColorImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
        [self setBackgroundImage:[self imageWithColor:[tintColor colorWithAlphaComponent:0.2]] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
        [self setBackgroundImage:tintColorImage forState:UIControlStateSelected|UIControlStateSelected barMetrics:UIBarMetricsDefault];
        [self setTitleTextAttributes:@{NSForegroundColorAttributeName: tintColor, NSFontAttributeName: [UIFont systemFontOfSize:13]} forState:UIControlStateNormal];
        [self setDividerImage:tintColorImage forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        self.layer.borderWidth = 1;
        self.layer.borderColor = [tintColor CGColor];
    }
}

- (UIImage *)imageWithColor: (UIColor *)color {
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
    UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return theImage;
}
@end

2
Я не впевнений, що це спрацює CGRectMake(0.0f, 0.0f, 1.0f, 1.0f): з моїх тестів з Xcode 11 beta, rectвін повинен бути такого ж розміру, що і межі сегментованого елемента управління.
Cœur

2
Оскільки iOS13 beta 6 tintcolor не відображається на вибраній кнопці, тому мені довелося додати рядок: [self setTitleTextAttributes: @ {NSForegroundColorAttributeName: UIColor.blackColor, NSFontAttributeName: [UIFont systemFontOfSize: 13]} for
Пітер Джонсон

Коли я намагаюся використовувати це, [[UISegmentedControl appearance] ensureiOS12Style]я отримую виняток. Будь-яка ідея, що відбувається? Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSMethodSignature getArgumentTypeAtIndex:]: index (2) out of bounds [0, 1]'
Джеремі Хікс

13

Станом на Xcode 11 beta 3

Зараз там знаходиться selectedSegmentTintColorмайно UISegmentedControl.

Дякую @rmaddy!


Оригінальна відповідь для бета-версії Xcode 11 та бета-2

Чи є правильне рішення, використовуючи загальнодоступні API, яке не потребує закопування в структуру приватного підгляду?

З бета-версією Xcode 11.0, мабуть, складно зробити це за правилами, оскільки, в основному, потрібно перемалювати всі фонові зображення для кожного штату самостійно, з круглими кутами, прозорістю та resizableImage(withCapInsets:). Наприклад, вам потрібно буде створити кольорове зображення, схоже на:
введіть тут опис зображення

Тож наразі спосіб «заглибитись» у «підзагляд» здається набагато простішим:

class TintedSegmentedControl: UISegmentedControl {

    override func layoutSubviews() {
        super.layoutSubviews()

        if #available(iOS 13.0, *) {
            for subview in subviews {
                if let selectedImageView = subview.subviews.last(where: { $0 is UIImageView }) as? UIImageView,
                    let image = selectedImageView.image {
                    selectedImageView.image = image.withRenderingMode(.alwaysTemplate)
                    break
                }
            }
        }
    }
}

Це рішення правильно застосує колір відтінку до виділення, як у: введіть тут опис зображення


1
Присуджується через те, що час закінчується, але бажано знайти рішення, яке не передбачає копання в приватну ієрархію :)
Джонатан.

@Jonathan. Дякую. Ви вже отримали найближчим рішення , які пов'язані з дивлячись на ієрархії: тому що , як тільки ви setBackgroundImageдля .normal, ви повинні встановити всі інші зображення ( в тому числі інших держав і setDividerImage), можливо , з деякими UIBezierPathі resizableImage(withCapInsets:), що робить його занадто складним , якщо ми хочемо , щоб дизайн IOS 13 сюди.
Cœur

Так, ідеально він буде зафіксований у бета-версії
Джонатан.

3
Це більше не потрібно для iOS 13b3. Зараз там знаходиться selectedSegmentTintColorмайно UISegmentedControl.
rmaddy

11

Швидка версія відповіді @Ilahi Charfeddine:

if #available(iOS 13.0, *) {
   segmentedControl.setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
   segmentedControl.selectedSegmentTintColor = UIColor.blue
} else {
   segmentedControl.tintColor = UIColor.blue
}

10
if (@available(iOS 13.0, *)) {

    [self.segmentedControl setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor], NSFontAttributeName: [UIFont systemFontOfSize:13]} forState:UIControlStateSelected];
    [self.segmentedControl setSelectedSegmentTintColor:[UIColor blueColor]];

} else {

[self.segmentedControl setTintColor:[UIColor blueColor]];}

7

iOS13 UISegmentController

як використовувати:

segment.setOldLayout(tintColor: .green)

extension UISegmentedControl
{
    func setOldLayout(tintColor: UIColor)
    {
        if #available(iOS 13, *)
        {
            let bg = UIImage(color: .clear, size: CGSize(width: 1, height: 32))
             let devider = UIImage(color: tintColor, size: CGSize(width: 1, height: 32))

             //set background images
             self.setBackgroundImage(bg, for: .normal, barMetrics: .default)
             self.setBackgroundImage(devider, for: .selected, barMetrics: .default)

             //set divider color
             self.setDividerImage(devider, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)

             //set border
             self.layer.borderWidth = 1
             self.layer.borderColor = tintColor.cgColor

             //set label color
             self.setTitleTextAttributes([.foregroundColor: tintColor], for: .normal)
             self.setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
        }
        else
        {
            self.tintColor = tintColor
        }
    }
}
extension UIImage {
    convenience init(color: UIColor, size: CGSize) {
        UIGraphicsBeginImageContextWithOptions(size, false, 1)
        color.set()
        let ctx = UIGraphicsGetCurrentContext()!
        ctx.fill(CGRect(origin: .zero, size: size))
        let image = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()

        self.init(data: image.pngData()!)!
    }
}

1
Це єдиний підхід, який працював для мене - фонові зображення. З певних причин вибранийSegmentTintColor не працює.
DenNukem

7

XCODE 11.1 та iOS 13

На основі відповіді @Jigar Darji, але більш безпечної реалізації.

Спочатку ми створюємо доступний ініціалізатор зручності:

extension UIImage {

convenience init?(color: UIColor, size: CGSize) {
    UIGraphicsBeginImageContextWithOptions(size, false, 1)
    color.set()
    guard let ctx = UIGraphicsGetCurrentContext() else { return nil }
    ctx.fill(CGRect(origin: .zero, size: size))
    guard
        let image = UIGraphicsGetImageFromCurrentImageContext(),
        let imagePNGData = image.pngData()
        else { return nil }
    UIGraphicsEndImageContext()

    self.init(data: imagePNGData)
   }
}

Потім ми розширюємо UISegmentedControl:

extension UISegmentedControl {

func fallBackToPreIOS13Layout(using tintColor: UIColor) {
    if #available(iOS 13, *) {
        let backGroundImage = UIImage(color: .clear, size: CGSize(width: 1, height: 32))
        let dividerImage = UIImage(color: tintColor, size: CGSize(width: 1, height: 32))

        setBackgroundImage(backGroundImage, for: .normal, barMetrics: .default)
        setBackgroundImage(dividerImage, for: .selected, barMetrics: .default)

        setDividerImage(dividerImage,
                        forLeftSegmentState: .normal,
                        rightSegmentState: .normal, barMetrics: .default)

        layer.borderWidth = 1
        layer.borderColor = tintColor.cgColor

        setTitleTextAttributes([.foregroundColor: tintColor], for: .normal)
        setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
    } else {
        self.tintColor = tintColor
    }
  }
}

Ідеально! Дякую!
Senocico Stelian

5

Ось мій погляд на відповідь Джонатана. Для Xamarin.iOS (C #), але з виправленнями щодо розміру зображень. Як і у коментарі Cœur щодо відповіді Коліна Блейка, я зробив усі зображення, крім дільника, за розміром сегментованого елемента управління. Дільник - 1х висота відрізка.

public static UIImage ImageWithColor(UIColor color, CGSize size)
{
    var rect = new CGRect(0, 0, size.Width, size.Height);
    UIGraphics.BeginImageContext(rect.Size);
    var context = UIGraphics.GetCurrentContext();
    context.SetFillColor(color.CGColor);
    context.FillRect(rect);
    var image = UIGraphics.GetImageFromCurrentImageContext();
    UIGraphics.EndImageContext();
    return image;
}

// https://stackoverflow.com/a/56465501/420175
public static void ColorSegmentiOS13(UISegmentedControl uis, UIColor tintColor, UIColor textSelectedColor, UIColor textDeselectedColor)
{
    if (!UIDevice.CurrentDevice.CheckSystemVersion(13, 0))
    {
        return;
    }

    UIImage image(UIColor color)
    {
        return ImageWithColor(color, uis.Frame.Size);
    }

    UIImage imageDivider(UIColor color)
    {
        return ImageWithColor(color, 1, uis.Frame.Height);
    }

    // Must set the background image for normal to something (even clear) else the rest won't work
    //setBackgroundImage(UIImage(color: backgroundColor ?? .clear), for: .normal, barMetrics: .default)
    uis.SetBackgroundImage(image(UIColor.Clear), UIControlState.Normal, UIBarMetrics.Default);

    // setBackgroundImage(tintColorImage, for: .selected, barMetrics: .default)
    uis.SetBackgroundImage(image(tintColor), UIControlState.Selected, UIBarMetrics.Default);

    // setBackgroundImage(UIImage(color: tintColor.withAlphaComponent(0.2)), for: .highlighted, barMetrics: .default)
    uis.SetBackgroundImage(image(tintColor.ColorWithAlpha(0.2f)), UIControlState.Highlighted, UIBarMetrics.Default);

    // setBackgroundImage(tintColorImage, for: [.highlighted, .selected], barMetrics: .default)
    uis.SetBackgroundImage(image(tintColor), UIControlState.Highlighted | UIControlState.Selected, UIBarMetrics.Default);

    // setTitleTextAttributes([.foregroundColor: tintColor, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 13, weight: .regular)], for: .normal)
    // Change: support distinct color for selected/de-selected; keep original font
    uis.SetTitleTextAttributes(new UITextAttributes() { TextColor = textDeselectedColor }, UIControlState.Normal); //Font = UIFont.SystemFontOfSize(13, UIFontWeight.Regular)
    uis.SetTitleTextAttributes(new UITextAttributes() { TextColor = textSelectedColor, }, UIControlState.Selected); //Font = UIFont.SystemFontOfSize(13, UIFontWeight.Regular)

    // setDividerImage(tintColorImage, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
    uis.SetDividerImage(imageDivider(tintColor), UIControlState.Normal, UIControlState.Normal, UIBarMetrics.Default);

    //layer.borderWidth = 1
    uis.Layer.BorderWidth = 1;

    //layer.borderColor = tintColor.cgColor
    uis.Layer.BorderColor = tintColor.CGColor;
}

3

Ви можете реалізувати наступний метод

extension UISegmentedControl{
    func selectedSegmentTintColor(_ color: UIColor) {
        self.setTitleTextAttributes([.foregroundColor: color], for: .selected)
    }
    func unselectedSegmentTintColor(_ color: UIColor) {
        self.setTitleTextAttributes([.foregroundColor: color], for: .normal)
    }
}

Код використання

segmentControl.unselectedSegmentTintColor(.white)
segmentControl.selectedSegmentTintColor(.black)

0

Хоча відповіді вище є чудовими, більшість із них невірно сприймає колір тексту у вибраному сегменті. Я створив UISegmentedControlпідклас, який можна використовувати на пристроях iOS 13 та pre-iOS 13 і використовувати властивість tintColor так само, як і на пристроях pre iOS 13.

    class LegacySegmentedControl: UISegmentedControl {
        private func stylize() {
            if #available(iOS 13.0, *) {
                selectedSegmentTintColor = tintColor
                let tintColorImage = UIImage(color: tintColor)
                setBackgroundImage(UIImage(color: backgroundColor ?? .clear), for: .normal, barMetrics: .default)
                setBackgroundImage(tintColorImage, for: .selected, barMetrics: .default)
                setBackgroundImage(UIImage(color: tintColor.withAlphaComponent(0.2)), for: .highlighted, barMetrics: .default)
                setBackgroundImage(tintColorImage, for: [.highlighted, .selected], barMetrics: .default)
                setTitleTextAttributes([.foregroundColor: tintColor!, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 13, weight: .regular)], for: .normal)

                setDividerImage(tintColorImage, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
                layer.borderWidth = 1
                layer.borderColor = tintColor.cgColor

// Detect underlying backgroundColor so the text color will be properly matched

                if let background = backgroundColor {
                    self.setTitleTextAttributes([.foregroundColor: background, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 13, weight: .regular)], for: .selected)
                } else {
                    func detectBackgroundColor(of view: UIView?) -> UIColor? {
                        guard let view = view else {
                            return nil
                        }
                        if let color = view.backgroundColor, color != .clear {
                            return color
                        }
                        return detectBackgroundColor(of: view.superview)
                    }
                    let textColor = detectBackgroundColor(of: self) ?? .black

                    self.setTitleTextAttributes([.foregroundColor: textColor, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 13, weight: .regular)], for: .selected)
                }
            }
        }

        override func tintColorDidChange() {
            super.tintColorDidChange()
            stylize()
        }
    }

    fileprivate extension UIImage {
        public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
          let rect = CGRect(origin: .zero, size: size)
          UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
          color.setFill()
          UIRectFill(rect)
          let image = UIGraphicsGetImageFromCurrentImageContext()
          UIGraphicsEndImageContext()

          guard let cgImage = image?.cgImage else { return nil }
          self.init(cgImage: cgImage)
        }
    }

Використовуючи tintColorDidChangeметод, ми гарантуємо, що stylizeметод буде викликаний кожен раз, коли tintColorвластивість змінюється у представленні сегмента або будь-якого з базових представлень, що є кращою поведінкою в iOS.

Результат: введіть тут опис зображення


-2

Трохи розгорніть відповідь Джонатана, якщо ви не хочете круглих кутів

extension UISegmentedControl {
    /// Tint color doesn't have any effect on iOS 13.
    func ensureiOS12Style(roundCorner: Bool = true) {
        if #available(iOS 13, *) {
            let tintColorImage = UIImage(color: tintColor)
            // Must set the background image for normal to something (even clear) else the rest won't work
            setBackgroundImage(UIImage(color: backgroundColor ?? .clear), for: .normal, barMetrics: .default)
            setBackgroundImage(tintColorImage, for: .selected, barMetrics: .default)
            setBackgroundImage(UIImage(color: tintColor.withAlphaComponent(0.2)), for: .highlighted, barMetrics: .default)
            setBackgroundImage(tintColorImage, for: [.highlighted, .selected], barMetrics: .default)
            setTitleTextAttributes([.foregroundColor: tintColor, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 13, weight: .regular)], for: .normal)
            setDividerImage(tintColorImage, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)

            if !roundCorner {
                layer.masksToBounds = false

                let borderView = UIView()
                borderView.layer.borderWidth = 1
                borderView.layer.borderColor = UIColor.black.cgColor
                borderView.isUserInteractionEnabled = false
                borderView.translatesAutoresizingMaskIntoConstraints = false

                addSubview(borderView)

                NSLayoutConstraint(item: borderView, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 1, constant: 0).isActive = true
                NSLayoutConstraint(item: borderView, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1, constant: 0).isActive = true
                NSLayoutConstraint(item: borderView, attribute: .width, relatedBy: .equal, toItem: self, attribute: .width, multiplier: 1, constant: 0).isActive = true
                NSLayoutConstraint(item: borderView, attribute: .height, relatedBy: .equal, toItem: self, attribute: .height, multiplier: 1, constant: 0).isActive = true
            }
        }
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.