레거시 앱의 iOS13 대응(UISegmentedControl편

소개



UISegmentedControl 편과 타이틀에는 기재하고 있습니다만,
속편 등은 지금은 전혀 없습니다 www

그런데, 제가 평소 담당하고 있는 앱은, 업무로 이용하는 InHouse의 낡은 앱입니다만
올해도 iOS의 버전 업 대응을 매번마다 실시하고 있었습니다.

UISegmentControl에 관해서도 올해는 크게 외형이 바뀔 것이라고 알고 있었기 때문에
TintColor를 설정하고 앱에 맞는 외형으로 대응하는 것으로 충분할 것이라고 생각했습니다.

앞으로도 외형이 iOS13에서 변경되었다는 사실을 전했고 한 번은 OK를 받았습니다.

역시, 전의 외형으로 되돌려 주지 않겠습니까?



오 콫 어 !!

Apple이 iOS13에서 변경한 외형에 대해
iOS12 이전의 상태로 되돌아가는 것은
Apple에 대한 반역행위나요ーーーー(´;ω;`)(멋대로 생각하고 있을 뿐?)

가능하면 지금의 iOS13의 외형 그대로 커스터마이즈하고 싶었습니다만,,,
NG가 나온 것은 어쩔 수 없다. iOS12 이전의 외형으로 할 수밖에 없다. . 할 수 있을까. . .

결과적으로 말하면 가능했습니다! !
비교하면 원래 iOS12 이전의 물건과 약간 다른 것은 알지만 전혀 허용 범위!

실제 이미지를 부디! !





ViewController.swift
    override func viewDidLoad() {
        super.viewDidLoad()
        if #available(iOS 13.0, *) {
            let segSizeSingle = CGSize.init(width: self.segment.frame.size.width, height: self.segment.frame.size.height)
            self.segment.setBackgroundImage(self.makeImage(UIColor.clear, size: segSizeSingle), for: .normal, barMetrics: .default)
            self.segment.setBackgroundImage(self.makeImage(self.segment.tintColor, size: segSizeSingle), for: .selected, barMetrics: .default)
            self.segment.setTitleTextAttributes([.foregroundColor : UIColor.white], for: .selected)
            self.segment.setTitleTextAttributes([.foregroundColor : self.segment.tintColor!], for: .normal)
            self.segment.layer.borderColor = self.segment.tintColor.cgColor
            self.segment.layer.borderWidth = 1
        }
    }

    func makeImage(_ color : UIColor, size : CGSize) -> UIImage {
        UIGraphicsBeginImageContext(size)
        let rect = CGRect(origin: CGPoint.zero, size: size)
        let context = UIGraphicsGetCurrentContext()!
        context.setFillColor(color.cgColor)
        context.fill(rect)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image!
    }


세그먼트의 BGImage와 레이어 등의 외형을 다양하게 만져 실현했습니다!

이번 샘플에서는 ViewDidLoad에 기재했습니다만
실제로 구현하는 경우는 Extention 또는 Objective-C라면 Category앱 전체에서 외형을 맞추는 것도 간단하게 할 수 있다고 생각하므로

부디, 활용해 주세요! ! ! !



(그런 낡은 외형으로 바꾸는 요망이야!라든지는 말하지 말고…)

끝까지 봐 주셔서 감사합니다! !

좋은 웹페이지 즐겨찾기