2016-04-15 4 views
2

У меня есть viewController, где я показываю изображение для добавления функции масштабирования. Я добавил scrollView в viewController и внутри ScrollView. Я добавил ImageView. Все работает нормально, ожидайте от одной вещи, скрывайтесь и показываете бары (навигационная панель + панель вкладок) на кране, но когда, скрывая их мой ImageView движется вверх увидеть изображения нижеСкрыть навигационную панель без перемещения scrollView

image 1

Смотрите здесь изображение и бары.

image 2

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

Это как я прятал свою навигационную панель:

 func tabBarIsVisible() ->Bool { 
    return self.tabBarController?.tabBar.frame.origin.y < CGRectGetMaxY(self.view.frame) 
} 


func toggle(sender: AnyObject) { 
    navigationController?.setNavigationBarHidden(navigationController?.navigationBarHidden == false, animated: true) 
     setTabBarVisible(!tabBarIsVisible(), animated: true) 

} 

идея, как я могу скрыть и показать бары, не затрагивая другие мои взгляды?

+1

Итак, ваше изображение всегда в центре обзора? Вы пытались снова установить свой центр, когда бар исчез? – Khuong

+0

хорошо, что имеет смысл снова установить центр, но разве у нас нет других возможностей? помните ли вы, что скрытый переход бара в приложение 'photos' он просто исчезает, вместо того чтобы двигаться вверх, чтобы понять, как это сделать? –

+1

У меня нет iPhone, поэтому я точно не знаю, что делает приложение для фотографий. Но вы можете добавить угасание в анимации с постепенным исчезновением :-). – Khuong

ответ

2

Проблема в том, что вам необходимо установить ограничение imageView на superView, а не TopLayoutGuide или BottomLayoutGuide.

так:

enter image description here

Затем вы можете сделать что-то вроде этого, чтобы сделать его smootly с анимацией:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var imageView: UIImageView! 
    var barIsHidden = false 
    var navigationBarHeight: CGFloat = 0 
    var tabBarHeight: CGFloat = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.hideAndShowBar)) 
     view.addGestureRecognizer(tapGesture) 
     navigationBarHeight = (self.navigationController?.navigationBar.frame.size.height)! 
     tabBarHeight = (self.tabBarController?.tabBar.frame.size.height)! 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    func hideAndShowBar() { 
     print("tap!!") 
     if barIsHidden == false { 
      UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseOut, animations: { 
       // fade animation 
       self.navigationController?.navigationBar.alpha = 0.0 
       self.tabBarController?.tabBar.alpha = 0.0 
       // set height animation 
       self.navigationController?.navigationBar.frame.size.height = 0.0 
       self.tabBarController?.tabBar.frame.size.height = 0.0 
       }, completion: { (_) in 
        self.barIsHidden = true 
      }) 
     } else { 
      UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseOut, animations: { 
       // fade animation 
       self.navigationController?.navigationBar.alpha = 1.0 
       self.tabBarController?.tabBar.alpha = 1.0 
       // set height animation 
       self.navigationController?.navigationBar.frame.size.height = self.navigationBarHeight 
       self.tabBarController?.tabBar.frame.size.height = self.tabBarHeight 
       }, completion: { (_) in 
        self.barIsHidden = false 
      }) 
     } 
    } 

} 

Вот результат:

enter image description here

У меня есть cr eated пример проекта для Вас по адресу: https://github.com/khuong291/Swift_Example_Series

Вы можете увидеть его на проекта 37

Надежда это поможет вам.

Смежные вопросы