2017-10-19 3 views
2

私はiOS開発を初めて行い、Swift 3.0を使用して作成されたiOSアプリケーションでいくつかのバグを修正する予定ですXcode 8とそれはほぼ正常に動作します。しかし、Xcode 9とSwift 4.0でそれを開くと、以前のボタンとは異なるボタンがいくつか表示されます。Swift 3.0を使用して開発されたSwift 4.0を使用してiOSアプリケーションのボタンの高さと幅を変更する方法

これらのボタンのソースコードを次に示します。

let button: UIButton = UIButton.init(type: UIButtonType.custom) 
    //set image for button 
    button.setImage(UIImage(named: "menu.png"), for: UIControlState()) 
    button.frame = CGRect(x: 0, y: 0, width: 30, height: 23) 
    let barButton = UIBarButtonItem(customView: button) 
    button.addTarget(self, action: #selector(ViewController.shareButtonPressed), for: UIControlEvents.touchUpInside) 

    self.navigationItem.leftBarButtonItem = barButton 

このコードは、ViewDidLoadメソッドの内部にあります。私は削除したときに私の問題は、それは、ボタンを消えるが、私は

button.frame = CGRect(x: 0, y: 0, width: 30, height: 23) 

、からの高さと幅を変更したときに、それは何も変わらない、

button.setImage(UIImage(named: "menu.png"), for: UIControlState()) 

です。 私の問題は、どうすればこのバグを修正できるかです。任意の提案、答えは高く評価され、与えられた詳細が十分でない場合は、言及してください。ありがとうございました!

答えて

1

UIBarButtonItemを使用してUIBarButtonItem(customView:)を使用してツールバーに追加されたビューは、自動レイアウトを使用してレイアウトされました。サイジング制約は、buttonに追加する必要があります。たとえば、

button.widthAnchor.constraintEqualToConstant(30.0).isActive = true 
button.heightAnchor.constraintEqualToConstant(23.0).isActive = true 

そうしないと、自動レイアウトではヘッダービューの固有のコンテンツサイズが使用されますが、これは予想外の可能性があります。

詳細については、WWDC 2017セッションUpdating your app for iOS 11を参照してください。

+0

は答えをいただき、ありがとうございます。 {:.isActive =真 button.widthAnchor.constraint(20.0 equalToConstant)}他{// フォールバック以前のバージョン 上} ' –

+0

はいそれはこの ' #available(iOSの9.0、*)かのように動作します。アンカーはiOS 9で導入されました。その下にターゲットを絞っている場合は、「#available」が必要ですが、前述のように制約サイズはiOS 11以降でのみ適用されます。 – beyowulf

0

SWIFT 4:

button.widthAnchor.constraint(equalToConstant: 30.0).isActive = true 
button.heightAnchor.constraint(equalToConstant: 20.0).isActive = true 
関連する問題