Как установить ограничения на кнопку в панели навигации?iOS 13 Swift 5 (кнопка добавления круглого профиля в навигационный контроллер) - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь реализовать кнопку изображения профиля в левом верхнем углу моего приложения.У меня проблемы с тем, чтобы заставить его выглядеть правильно.Кажется, что независимо от того, какие ограничения я накладываю на кнопку, она всегда получается гораздо крупнее и более однобокой, чем я хочу.Перед реализацией фактического контроллера навигации я просто использовал объект панели навигации и поместил кнопку поверх него.Однако я не могу сделать это с фактической панелью контроллера навигации.

Вот как это выглядело раньше: Как я хочу, чтобы оно выглядело

Вот как это выглядит после встраивания вида в контроллер навигации: Текущий

Вот как у меня есть кнопка, встроенная в панель навигации: Раскадровка

И, наконец, вот мой код:

class HomeViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    profileButton.layer.borderWidth = 1
    profileButton.layer.masksToBounds = false
    profileButton.layer.borderColor = Global.redColor.cgColor
    profileButton.layer.cornerRadius = (profileButton.frame.height/2)
    profileButton.clipsToBounds = true
    profileButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    setUpGestures()
}

func setUpGestures() {
    let profileEdge = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(profileEdgeSwiped))
    profileEdge.edges = .left
    view.addGestureRecognizer(profileEdge)

    let settingsEdge = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(settingsEdgeSwiped))
    settingsEdge.edges = .right
    view.addGestureRecognizer(settingsEdge)
}

@objc func profileEdgeSwiped(_ recognizer: UIScreenEdgePanGestureRecognizer) {
    if recognizer.state == .recognized {
        accountAction()
    }
}

@objc func settingsEdgeSwiped(_ recognizer: UIScreenEdgePanGestureRecognizer) {
    if recognizer.state == .recognized {
        // Open settings menu (implement later)
    }
}

@objc func profileAction() {
    NotificationCenter.default.post(name: NSNotification.Name("ToggleSideMenu"), object: nil)
}

@IBOutlet weak var profileButton: UIButton!

@IBAction func profileAction(_ sender: Any) {
    //NotificationCenter.default.post(name: NSNotification.Name("ToggleSideMenu"), object: nil)
        accountAction()
}

func accountAction() {
    let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
    alert.view.tintColor = Global.redColor
    alert.addAction(UIAlertAction(title: "Log Out", style: .default, handler: { _ in
        self.dismiss(animated: true, completion: nil)
    }))
    alert.addAction(UIAlertAction(title: "Add Account", style: .default, handler: { _ in
        // Add additional account (implement later)
    }))
    alert.addAction(UIAlertAction.init(title: "Cancel", style: .cancel, handler: nil))
    self.present(alert, animated: true, completion: nil)
}    }

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Вот мое временное решение: во-первых, масштабируйте изображение профиля по умолчанию в фотошопе до 90 x 90 пикселей или используйте этот веб-сайт: Изменить размер изображения .Удалите все предыдущие кнопки и перетащите новую кнопку на панель навигации из раскадровки.Установите для кнопки имя «», а изображение - в зависимости от размера изображения.В viewDidLoad () установите радиус границы равным 15. То, что я делаю, когда мне нужно изменить изображение, вызывает это расширение и изменяет размер ширины до 30. Причина в том, что это временно, потому что, если вы что-то измените в раскадровке, изображение остановитсярендеринг правильно, и вы должны повторить шаги выше, чтобы заставить его работать снова.

extension UIImage {
func resizeImage (newWidth: CGFloat) -> UIImage {
    let scale = newWidth / self.size.width
    let newHeight = self.size.height * scale
    let newSize = CGSize(width: newWidth, height: newHeight)

    let renderer = UIGraphicsImageRenderer(size: newSize)

    let image = renderer.image { (context) in
        self.draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: newSize))
    }
    return image
} }
0 голосов
/ 23 сентября 2019

Можете ли вы проверить одноразовое комментирование, так как сейчас у меня нет Mac

, также проверьте этот пост, так как у вас может быть проблема ширины Изменение ширины UIBarButtonItem в UINavigationBar

// комментируйте этот код

profileButton.clipsToBounds = true

Я надеюсь, что это поможет, поскольку однажды у меня возникла та же проблема.

Вы также можете проверитьэто с помощью init (customView: UIView) надеюсь, что это поможет

...