[swift] 요소를 화면 폭의 중앙에 배치하는 방법

6629 단어 SwiftiOS

오프닝


화면을 만들 때storyboard를 사용하지만 문자열을 화면 너비 중앙에 배치하고 싶을 때 요소를 화면 너비로 일일이 확장한다XXX.textAlignment = .center 이렇게 하는 것도 약간 시뮬레이션이 있어서 보기 싫다.
따라서 우리는 요소에 설정된 문자열의 길이에 따라 요소의 폭을 확대하고 화면 폭의 중앙에 설정할 수 있는 논리를 고려했다.
(찾아보면 찾을 줄 알았는데 전혀 찾을 수가 없어요. 찾는 방법이 안 좋아요?)

개발 환경


터미널: MacBook Pro/MacOS10.14.5(Mojave)
Xcode:10.2.1
Swift:5

화면 이미지


이 문자열을 화면 너비의 중앙에 표시

논리


다음 논리를 통해 알 수 있듯이 (화면 너비 - 문자열 너비)/2 값을 UILAbel의 표시 위치(X축, 왼쪽 위)로 설정합니다.
ViewController.swift

    func editLabel() {
        let width = Float(UIScreen.main.bounds.size.width)
        lblTitleLat.text = "この文字列を画面幅の中央に表示"
        lblTitleLat.textColor = .black
        lblTitleLat.font = UIFont.boldSystemFont(ofSize: 20)
        // 文字列をUILabelに中央揃えで表示(一応)
        lblTitleLat.textAlignment = .center
        // 文字列の長さに合わせて、UILabel自体の大きさを調整
        lblTitleLat.sizeToFit()
        // ラベルの表示位置(X軸、左上)の値を算出
        let widthGap = (width - Float(lblTitleLat.frame.width)) / 2
        lblTitleLat.frame = CGRect.init(x: CGFloat(widthGap),
                                        y: lblTitleLat.frame.minY,
                                        width: lblTitleLat.frame.width,
                                        height: lblTitleLat.frame.height)

        // 下の行にも同じ処理を入れてみただけ。
        lblLat.text = "文字列幅:" + (NSString(format: "%.2f", lblTitleLat.frame.width) as String)
        lblLat.sizeToFit()
        let widthGap2 = (width - Float(lblLat.frame.width)) / 2
        lblLat.frame = CGRect.init(x: CGFloat(widthGap2),
                                   y: lblLat.frame.minY,
                                   width: lblLat.frame.width,
                                   height: lblLat.frame.height)
    }

푹 빠지다


거기에 푹 빠졌다기보다 다른 사람들이 얼마나 많이 했다고 생각하기 때문에 의외로 샘플을 찾지 못한 것 자체가 힘들었다.
또한 수학이 매우 번거롭기 때문에'(화면 너비-문자열의 너비)/2'의 값을 UILAbel의 표시 위치(X축, 왼쪽 위)로 설정하는 방법론을 찾기 어렵다.
어쨌든 예상대로 할 수 있어서 다행이다.

좋은 웹페이지 즐겨찾기