2

Swift 3.1에서 Swift 4.0 (Xcode 8.3.3에서 Xcode 9.0)으로 내 응용 프로그램을 마이그레이션했으며 인터페이스 일부가 손상되었습니다. 네비게이션 컨트롤러의 네비게이션 바가 완전히 엉망입니다. enter image description here스위프트 3에서 스위프트 4로 마이 그 레이션 네비게이션 바 깨진 인터페이스

3 개 요소가 있습니다 : 스크린 샷 제발 봐

  • 는 Netfnet 로고 (이미지) 왼쪽

  • 바로 신호 강도 (이미지)

  • 바로 QR 코드 버튼

보시다시피 두 개의 이미지가 너무 크고 중앙에 있지 않고 버튼이 변형되었습니다 (완벽한 사각형이어야하며 모든 이미지도 마찬가지입니다). 이 탐색 컨트롤러 생성 된 코드입니다 :

import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     settings() 
    } 

    func settings() { 
     let color = UIColor(red: 81/255, green: 155/255, blue: 22/255, alpha: 1.0) 
     self.navigationController?.navigationBar.barTintColor = color 

     let logoImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 35, height: 35)) 
     logoImageView.contentMode = .scaleAspectFit 
     let logo = UIImage(named: "littleLogoImage") 
     logoImageView.image = logo 
     navigationItem.leftBarButtonItem = UIBarButtonItem(customView: logoImageView) 

     let signalStengthImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 35, height: 35)) 
     signalStengthImageView.contentMode = .scaleAspectFit 
     signalStengthImageView.image = UIImage(named: "signalStrength4") 
     let signalStengthImageItem = UIBarButtonItem(customView: signalStengthImageView) 

     let button = UIButton(type: .custom) 
     button.setImage(UIImage(named: "qrCodeButton"), for: .normal) 
     button.frame = CGRect(x: 0, y: 0, width: 35, height: 35) 
     let qrCodeButtonItem = UIBarButtonItem(customView: button) 

     navigationItem.rightBarButtonItems = [qrCodeButtonItem, signalStengthImageItem] // 
    } 

} 

나 자신을 직접 이미지의 해상도를 줄일 수는 있지만, everting 스위프트 3.1에서 잘 왜 그냥하지 않으며 스위프트 4.0이 끊어집니다.

도움이나 조언에 감사드립니다.

답변

2

너비와 높이 제한을 추가해야합니다. CustomNavigationController에서

귀하의 barImageView

barButton은 다음과 같아야합니다

func barImageView(imageName: String) -> UIBarButtonItem { 
    let imgView = imageView(imageName: imageName) 
    let widthConstraint = imgView.widthAnchor.constraint(equalToConstant: 35) 
    let heightConstraint = imgView.heightAnchor.constraint(equalToConstant: 35) 
    heightConstraint.isActive = true 
    widthConstraint.isActive = true 
    return UIBarButtonItem(customView: imgView) 
} 

func barButton(imageName: String, selector: Selector) -> UIBarButtonItem { 
    let button = UIButton(type: .custom) 
    button.setImage(UIImage(named: imageName), for: .normal) 
    button.frame = CGRect(x: 0, y: 0, width: 35, height: 35) 
    button.addTarget(self, action: selector, for: .touchUpInside) 
    let widthConstraint = button.widthAnchor.constraint(equalToConstant: 35) 
    let heightConstraint = button.heightAnchor.constraint(equalToConstant: 35) 
    heightConstraint.isActive = true 
    widthConstraint.isActive = true 
    return UIBarButtonItem(customView: button) 
} 

당신의 signalStengthImageViewLogoWithSignalStrength에서 : 탐색 바 항목 제약 기지

signalStengthImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 35, height: 35)) 
signalStengthImageView.contentMode = .scaleAspectFit 
let widthConstraint = signalStengthImageView.widthAnchor.constraint(equalToConstant: 35) 
let heightConstraint = signalStengthImageView.heightAnchor.constraint(equalToConstant: 35) 
heightConstraint.isActive = true 
widthConstraint.isActive = true 
+0

답변 해 주셔서 감사합니다. 현재 작동 중입니다! – Alex

+0

도움 주셔서 감사합니다! – Alex

2

엑스 코드 9,이 추가 :

if #available(iOS 11.0, *) { 
    logoImageView.widthAnchor.constraint(equalToConstant: 35).isActive = true 
    logoImageView.heightAnchor.constraint(equalToConstant: 35).isActive = true 
} else { 
    //set frames 
} 
+0

답변 해 주셔서 감사합니다. 그러나이 확인은 필요하지 않습니다. 배포 목표는 10.3이며 실제 장치를 확인하지 않고 모든 것이 작동합니다. 도와 줘서 고마워! – Alex