Почему значение в кадре, равное определенному размеру, не выполняет ту же работу, когда я меняю ориентацию устройства? - PullRequest
1 голос
/ 14 мая 2019

У меня есть фрагмент кода, который позволяет мне изменить размер UIImageView во время изменения ориентации устройства.

Я жестко закодировал эти значения (высота = 896 и ширина = 414), и это хорошо работает, но когда я хочу сделать динамический размер, поместив динамические значения (height = self.view.frame.size.height и width = self.view.frame.size.width), он не работа ...

Однако, self.view.frame.size.height = 896 и self.view.frame.size.width = 414 это странно ... Я что-то пропустил, я думаю.

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    if UIDevice.current.orientation.isLandscape {
        print("Landscape")
        self.newImageView?.frame.size.height = 414
        self.newImageView?.frame.size.width = 896
        navBar?.frame = CGRect(x: 0, y: 0, width: 896, height: 100)
    } else {
        print("Portrait")
        self.newImageView?.frame.size.height = 896
        self.newImageView?.frame.size.width = 414
        navBar?.frame = CGRect(x: 0, y: 40, width: 414, height: 100)
    }
}  

РЕДАКТИРОВАТЬ (решение) : Для информации я использовал этот код для своего кода, но решение в заявке короче и современнее

 //Share bar
        let shareBar: UIBarButtonItem = UIBarButtonItem.init(barButtonSystemItem:.action, target: self, action: #selector(userDidTapShare))
        self.navigationItem.rightBarButtonItem = shareBar
        if UIDevice.current.orientation.isLandscape {
            let width =  max(self.view.frame.size.width, self.view.frame.size.height)
            let height = min(self.view.frame.size.width, self.view.frame.size.height)
            self.newImageView?.frame.size.height = height
            self.newImageView?.frame.size.width = width
            navBar = UINavigationBar(frame: CGRect(x: 0, y: UIApplication.shared.statusBarFrame.height, width: width, height: 100))
        } else {
            let width =  min(self.view.frame.size.width, self.view.frame.size.height)
            let height = max(self.view.frame.size.width, self.view.frame.size.height)
            self.newImageView?.frame.size.height = height
            self.newImageView?.frame.size.width = width
            navBar = UINavigationBar(frame: CGRect(x: 0, y: UIApplication.shared.statusBarFrame.height, width: width, height: 100))
        }
        view.addSubview(navBar!)

Есть идеи?

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Если вы хотите изменить размер панели навигации

 self.navBar.autoresizingMask = (UIView.AutoresizingMask(rawValue: UIView.AutoresizingMask.RawValue(UInt8(UIView.AutoresizingMask.flexibleRightMargin.rawValue) | UInt8(UIView.AutoresizingMask.flexibleLeftMargin.rawValue) | UInt8(UIView.AutoresizingMask.flexibleBottomMargin.rawValue) | UInt8(UIView.AutoresizingMask.flexibleTopMargin.rawValue))))

поставить это после вашего view.addSubview (navBar!)

1 голос
/ 15 мая 2019

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

Но согласитесь с комментариями, используйте авто-макет, это облегчит вашу жизнь

...