🧯

UIButton.Configurationを使いサイズ指定を忘れたとき、文字は表示されるがサイズが0なのでクリックに反応しない

に公開

ハマったので書く。

コード

import UIKit

class ViewController: UIViewController {
    
    lazy var myButton: UIButton = {
        var config = UIButton.Configuration.filled()
        config.title = "実行"
        let button = UIButton(
            configuration: config,
            primaryAction: UIAction(handler: { _ in
            // ボタンがタップされた時の処理
        }))
        return button
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(myButton)
    }
    
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        print(myButton.frame.size)
        myButton.center = CGPoint(
            x: view.frame.size.width / 2.0,
            y: view.frame.size.height / 2.0)
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(true)
        print(myButton.frame.size)
    }
}

結果

(0.0, 0.0)
(0.0, 0.0)

画面

サイズ0のものがセンターに配置されて、そこから文字列が(右下か右上に)生えてる状態。

Discussion