2013-09-26 14 views
14

के तहत प्रारंभिक स्क्रॉल स्थिति मेरे पास एक वेबव्यू है जो नेविगेशन बार के नीचे वांछित के रूप में स्क्रॉल कर रहा है।आईओएस 7 वेबव्यू नेविगेशन बार

हालांकि, जब मैं पहली बार नियंत्रक लोड करता हूं, तो वेबव्यू में लोड किया गया पृष्ठ स्क्रॉल किया जाता है ताकि यह नेविगेशन बार के शीर्ष के साथ संरेखित हो। जब मैं वेब दृश्य स्क्रॉल करता हूं, तो दाईं ओर सही बैठने के लिए सही इन्सेट मौजूद होता है, यह केवल प्रारंभिक स्थिति है जो गलत है।

इन्सेट समेत शीर्ष पर पूरी तरह से स्क्रॉल करने के लिए प्रारंभिक स्थिति कैसे प्राप्त कर सकता हूं?

+2

यह अभी भी 7.0.4 में एक समस्या है और नीचे दिए गए सुझावों में से कोई भी इसे ठीक नहीं करता है। कोई अन्य विचार? – Axeva

उत्तर

1

उपयोग नीचे

CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame]; 
CGFloat navHeight = self.navigationController.navigationBar.frame.size.height; 
applicationFrame.origin.y = navHeight + 4; 
webView = [[UIWebView alloc] initWithFrame:applicationFrame]; 
12

आप एक अपारदर्शी नेविगेशन पट्टी होने से परहेज नहीं करते हैं, तो सबसे सरल समाधान के लिए अपने वेब दृश्य शामिल हैं उस दृश्य नियंत्रक में यह करने के लिए हो सकता है:

self.navigationController.navigationBar.translucent = NO; 

फ्रेम की स्थिति तब आईओएस 6 के समान व्यवहार को अपनाएगी, जादुई रूप से!

+4

निश्चित रूप से काम करता है। हालांकि, मैं वास्तव में क्या देखना चाहूंगा UITiewViewController का व्यवहार UIViewController में UIWebView युक्त उपलब्ध होना है। –

4

जिस तरह से मैंने इस समस्या को हल किया है वह WebViewDidFinishLoad प्रतिनिधि कॉलबैक के साथ है। वेब व्यू के लिए कॉलबैक विधि में मैंने वेब व्यू के स्क्रॉल व्यू को सही बनाने के लिए सभी काम सेट किए हैं।

[webView.scrollView setContentInset:UIEdgeInsetsMake(64, 0, 0, 0)]; 
[webView.scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(64, 0, 0, 0)]; 
[webView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO]; 
5

रिक का उत्तर सही है, शीर्ष मूल्य को छोड़कर सही होना चाहिए, यह मेरे लिए काम किया गया है!

[self.webView.scrollView setContentInset:UIEdgeInsetsMake(-44, 0, 0, 0)]; 
[self.webView.scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(-44, 0, 0, 0)]; 
[self.webView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO]; 

मैंने उपयोग किया -44, यदि आपके पास शीर्ष पर स्टेटस बार नहीं है तो आपको -64 का उपयोग करना चाहिए।

+0

मूल्य सकारात्मक होना चाहिए। 44 या 64. –

1

भी कर सकते हैं सामग्री viewDidAppear: में वेबव्यू के scrollview की ऑफसेट, उदाहरण के लिए सेट करें: यदि viewWillAppear: में रखा है, इसलिए जब दृश्य का प्रकटन आप एक दृश्य कूद देखेंगे, यह कोई प्रभाव नहीं है

[self.webView.scrollView setContentOffset:CGPointMake(0, -64) animated:NO]; 

दुर्भाग्य से सामग्री में क्योंकि यह नेविगेशन बार के नीचे से अपने नए स्थान पर स्थानांतरित हो जाता है।

3

मेरे पास एक ही समस्या थी और इसे ठीक किया गया। समाधान बहुत आसान है:

स्टोरीबोर्ड पर जाएं, दृश्य नियंत्रक का चयन करें जिसमें आपका UIWebView शामिल है और विशेषता निरीक्षक खोलें। यहां, आपको "एक्स्टेंड एज" शीर्षक दिखाई देगा, बस "अंडर टॉप बार्स" बॉक्स को अनचेक करें और मैं काम करूंगा!

आशा है कि इससे मदद मिलती है!

+0

वास्तव में मैं जो पूछ रहा हूं वह वास्तव में नहीं।यह पूर्व आईओएस 7 व्यवहार में बदल जाता है जहां वेबव्यू की सीमाएं (0, navbarheight) से शुरू होती हैं। –

0

मेरे समाधान:

- (void)loadView { 
    ... 

    _offsetSet = NO; 
} 

- (void) viewDidLayoutSubviews { 

    if (!_offsetSet) { 
     [_webView.scrollView setContentOffset:CGPointMake(0, -self.topLayoutGuide.length) animated:NO]; 
    } 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    _offsetSet = YES; 
} 
0

@ पूरन के जवाब की एक अधिक सामान्य संस्करण के लिए, बल्कि hardwiring 44 या 64 से, यह topLayoutGuide से मिलता है। साथ ही, यदि आप कई बार लोड करते हैं, तो आपको केवल इन मानों को एक बार बदलना होगा:

UIEdgeInsets insets = self.myWebView.scrollView.contentInset; 
if (UIEdgeInsetsEqualToEdgeInsets(insets, UIEdgeInsetsZero)) { 
    insets.top = -self.topLayoutGuide.length; 
    [self.myWebView.scrollView setContentInset:insets]; 
    [self.myWebView.scrollView setScrollIndicatorInsets:insets]; 
    [self.myWebView.scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO]; 
} 
संबंधित मुद्दे