2017-10-19 83 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.setImage(UIImage(named: "menu.png"), for: UIControlState()) 

消失的按鈕,但是當我改變高度和寬度,

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

它改變不了什麼。 我的問題是我該如何解決這個錯誤。任何建議,答覆高度讚賞,如果給出的細節不夠,請提及。謝謝!

回答

1

從iOS 11開始,使用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

謝謝你的答案。它的工作原理,因爲這 '如果#available(的iOS 9.0,*){ button.widthAnchor.constraint(equalToConstant:20.0).isActive =真 }其他{// 後退在早期版本 }' –

+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 
相關問題