2014-10-04 16 views
19

आईओएस 8 एक सुपर नई शानदार सुविधा जोड़ता है: उपयोगकर्ता स्क्रॉल करते समय नेविगेशन बार छुपाता है।स्क्रॉल करते समय स्टेटस बार छुपाएं

viewDidload में एक भी लाइन के साथ यह:

navigationController?.hidesBarsOnSwipe = true 

कूल, है ना?

लेकिन अब मुझे एक छोटी सी समस्या है: जब नेविगेशन बार छुपाया जाता है, तो स्टेटस बार अभी भी यहां है और सामग्री को ओवरलैप करता है, जो बदसूरत है।

नेविगेशन बार छुपाए जाने पर इसे छिपाने के लिए मुझे क्या करना चाहिए?

+0

हे, क्या आपने कभी पता चला है कि यह कैसे करना है? धन्यवाद! – dot

+0

दुर्भाग्य से ... क्या आप +1 जोड़ सकते हैं? – jmcastel

+0

मेरे प्रश्न पर एक नज़र डालें: http://stackoverflow.com/questions/25870382/how-to-prevent-status-bar-from-overlapping-content-with-hidesbarsonswipe-set-on –

उत्तर

0

मैं this post पर कुछ टिप्पणियों पर इस उत्तर का आधार दे रहा हूं, जो अटकलें हैं। मुझे यकीन नहीं है कि यह काम करेगा, क्योंकि नेविगेशन बार छुपाए जाने पर ऐप्पल हमें कोई सीधा तरीका या प्रतिनिधि तरीका नहीं देता है।

उपclass UINavigationBar नेविगेशनबार के रूप में। इसलिए जैसे अपने hidden संपत्ति के लिए एक संपत्ति पर्यवेक्षक जोड़ें:

var hidden: Bool{ 
didSet{ 
    UIApplication.sharedApplication().setStatusBarHidden(self.hidden, animation: .Slide) 
} 
} 

तब आप अपने मुख्य दृश्य नियंत्रक में अपने viewDidLoad विधि पर जाएँ, और एक उदाहरण के लिए (self.navigationController.navigationBar, यकीन नहीं है जो एक या) अपने self.navigationBar संपत्ति सेट करना चाहते हैं आपकी नई नेविगेशनबार कक्षा का।

ध्यान दें कि मैं अभी यह परीक्षण नहीं कर सकता, मुझे बताएं कि यह कैसे काम करता है।

+0

यह नहीं करता है। मुझे छिपी घोषणाओं को कहां रखना है? self.navigationController.navigationBar मुझे "UINavigationController के पास नेविगेशनबार नामक सदस्य नहीं है"। self.navigationBar मुझे "myTableViewController के पास नेविगेशनबार नामक सदस्य नहीं है" – jmcastel

+0

@jmcastel क्या UINavigationController में नेविगेशन बार नहीं है? https://developer.apple.com/library/ios/documentation/Uikit/reference/UINavigationController_Class/index.html#//apple_ref/occ/instp/UINavigationController/navigationBar – erdekhayser

+0

मुझे पता है लेकिन यह त्रुटि है; ( – jmcastel

1

इस के लिए समस्या का समाधान होने Xcode 6.1 में

navigationController .navigationBar.hidden = सच

+1

मैं बस जब नेविगेशनबार छुपा हुआ है तो स्टेटस बार को छिपाना चाहते हैं। इसकी निगरानी कैसे करें? – jmcastel

10

अवहेलना UIViewController पर निम्न विधियों:

extension MyViewController { 
    override func prefersStatusBarHidden() -> Bool { 
    return barsHidden // this is a custom property 
    } 

    // Override only if you want a different animation than the default 
    override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation { 
    return .Slide 
    } 
} 

अद्यतन barsHidden में कहीं कोड और कॉल setNeedsStatusBarAppearanceUpdate()

0

आप UISwipeGestureRecognizer का उपयोग करके स्वाइप का पता लगा सकते हैं। मैं इसे का उपयोग कर रहा UIWebView पर:

viewDidLoad में मेरे पास है:

let swipeUp = UISwipeGestureRecognizer(target: self, action: "didSwipe") 
let swipeDown = UISwipeGestureRecognizer(target: self, action: "didSwipe") 
swipeUp.direction = UISwipeGestureRecognizerDirection.Up 
swipeDown.direction = UISwipeGestureRecognizerDirection.Down 
webView.addGestureRecognizer(swipeUp) 
webView.addGestureRecognizer(swipeDown) 
navigationController?.hidesBarsOnSwipe = true 

मैं अपने ViewController के लिए एक विस्तार है, कहा जाता है WebViewViewController:

extension WebViewViewController { 
    override func prefersStatusBarHidden() -> Bool { 
     return hideStatusBar 
    } 

    override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation { 
     return UIStatusBarAnimation.Slide 
    } 
} 

मेरी WebViewViewController में एक वर्ग के स्तर पर मेरे पास भी है:

var hideStatusBar = false 

func didSwipe() { 
    hideStatusBar = true 
} 
0

ठीक है मैंने पूरे दिन ऐसा किया, उम्मीद है कि यह हेल पीएस कुछ लोग बाहर। barHideOnSwipeGestureRecognizer है। तो आप संबंधित UIPanGesture के लिए श्रोता बना सकते हैं, यह नोट करते हुए कि अगर नेविगेशन बार छुपा हुआ है तो इसकी वाई उत्पत्ति -44.0 है; अन्यथा, यह 0 है (20 नहीं) क्योंकि हमने स्टेटस बार छुपाया है!)।

आपके विचार नियंत्रक में:

// Declare at beginning 
var curFramePosition: Double! 
var showStatusBar: Bool = true 
self.navigationController?.barHideOnSwipeGestureRecognizer.addTarget(self, action: "didSwipe:") 

... 

override func viewDidLoad(){ 
    self.navigationController?.hidesBarsOnSwipe = true 
    curFramePosition = 0.0 // Not hidden 
    self.navigationController?.barHideOnSwipeGestureRecognizer.addTarget(self, action: "didSwipe:") 
    ... 
} 

func didSwipe(swipe: UIPanGestureRecognizer){ 
    // Visible to hidden 
    if curFramePosition == 0 && self.navigationController?.navigationBar.frame.origin.y == -44 { 
     curFramePosition = -44 
     showStatusBar = false 
     prefersStatusBarHidden() 
     setNeedsStatusBarAppearanceUpdate() 
    } 
    // Hidden to visible 
    else if curFramePosition == -44 && self.navigationController?.navigationBar.frame.origin.y == 0 { 
     curFramePosition = 0 
     showStatusBar = true 
     prefersStatusBarHidden() 
     setNeedsStatusBarAppearanceUpdate() 
    } 
} 

override func prefersStatusBarHidden() -> Bool { 
    if showStatusBar{ 
     return false 
    } 
    return true 
} 
संबंधित मुद्दे