Я совершенно новичок в разработке для iOS, и я должен исправить некоторые ошибки в приложении для iOS, которое сделано с использованием Swift 3.0 и Xcode 8, и оно работает почти нормально. Но когда я открываю его с помощью Xcode 9 и Swift 4.0, он показывает некоторые кнопки, отличающиеся от предыдущих.

Вот исходный код для одной из этих кнопок.

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)

Это ничего не меняет. Моя проблема в том, как я могу исправить эту ошибку. Любое предложение, ответ высоко ценится, и если приведенные данные не достаточно, пожалуйста, укажите. Спасибо!

8
Sami Udakara 19 Окт 2017 в 06:22

3 ответа

Лучший ответ

Начиная с iOS 11, представления, добавленные на панели инструментов с помощью UIBarButtonItem с использованием UIBarButtonItem(customView:), теперь размещаются с использованием автоматического макета. Вы должны добавить ограничения размера на button. Например:

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

В противном случае, автоматическая разметка будет использовать внутренний размер содержимого вашего представления заголовка, который, вероятно, не соответствует ожидаемому.

Для получения дополнительной информации см. Сеанс WWDC 2017 Обновление приложения для iOS 11.

10
beyowulf 19 Окт 2017 в 03:44

Свифт 4:

button.widthAnchor.constraint(equalToConstant: 30.0).isActive = true
button.heightAnchor.constraint(equalToConstant: 20.0).isActive = true
9
Chetan Dobariya 22 Дек 2017 в 10:42

Вы можете настроить ширину и высоту кнопки, используя раскадровку в XCode. Просто выберите вашу кнопку и откройте это окно. Схема ограничения

После этого просто добавьте ограничения по высоте.

0
Pawan kumar sharma 2 Янв 2019 в 10:05