2009-09-16 14 views
6

के तहत UIWebView मेरे पास एक UIWebView है जिसे मैं अपने पारदर्शी UINavigationBar के अंतर्गत रखना चाहता हूं। आम तौर पर जब मैं एक पारदर्शी UINavigationBar के तहत एक UIScrollView डालता हूं, तो मैंने अपनी सामग्री सेट अप ऑफ़सेट की है कि सभी सामग्री को बार के बाद शुरू में धक्का दिया जाएगा ताकि इसे देखा जा सके; इसके बाद, उपयोगकर्ता पाठ स्क्रॉल कर सकता है और यह बार को अंडरलैप करेगा।पारदर्शी UINavigationBar

समस्या यह है कि UIWebView UIScrollView का उचित उप-वर्ग नहीं है; इस प्रकार, मैं setContentOffset का उपयोग नहीं कर सकता। क्या कोई पारदर्शी नेविगेशन बार के साथ अच्छा दिखने के लिए UIWebView प्राप्त करने पर कोई सुझाव या युक्तियां हैं? धन्यवाद।

उत्तर

0

मुझे यकीन नहीं है कि ऐसा करने के लिए स्वच्छ विधि है या नहीं। मैं यह कोशिश की है नहीं, लेकिन यहाँ एक विचार है:

  1. मूल 0,0
  2. अवरोधन सभी स्क्रीन छू लेती है
  3. पर UIWebView आकर्षित करता है, तो आप उपयोगकर्ता ऊपर खींचने (वेबव्यू ऊपर स्क्रॉल) का पता लगाने,
  4. पर स्पर्श को पास न करें इसके बजाय, वेबदृश्य को x पिक्सेल ऊपर ले जाएं ताकि इसकी उत्पत्ति (0, -x) हो। फिर x पिक्सेल
  5. जोड़ने के लिए ऊंचाई बदलें, आपको किसी प्रकार की स्थिति रखने की आवश्यकता होगी ताकि आप जान सकें कि वेबव्यू का आकार बदलना बंद करना और स्पर्श पर गुजरना शुरू करना है ताकि वेबव्यू स्क्रॉल हो जाए।

इसे वापस प्राप्त करना वही है जो आप इसे ड्रैग डाउन (वेबव्यू को स्क्रॉल करना) पर करते हैं।

+0

आप 'uiwebview' के स्पर्श को पास न करें 'भाग कैसे करते हैं? – dotnetcoder

+0

यह संभवतः यह हासिल करने का सबसे आसान तरीका नहीं है, खासकर यदि आप आईओएस 5+ को लक्षित कर रहे हैं (UIWebView scrollView.contentInset इसे साफ़ करता है)। Zerotool द्वारा जवाब देखें। आईओएस 4 के लिए, आप UIWebview सबव्यूज़ को विश्वसनीय रूप से उसी UIScrollView तक पहुंचने के लिए पुन: सक्रिय कर सकते हैं। – Prometheus

+0

यह एक बहुत पुराना क्यू है और – coneybeare

0

संभावित रूप से ऐसा करने का एक और तरीका यह है कि आप जिस HTML कोड को प्रतिपादित कर रहे हैं उसमें एक div डालें ताकि यह पृष्ठ के शीर्ष पर फैला हुआ हो। सुनिश्चित करें कि आप अपना ज़ूम सही ढंग से सेट करें और uiwebviews उत्पत्ति को (0, -x) से शुरू करने के लिए सेट करें।

2

मैं UIWebView subviews की स्थापना सीमा को क्लिप नहीं करने के लिए कर यह उपलब्धि हासिल है, तो मैं इसके बारे में शीर्ष पर एक उपकरण पट्टी रख दिया और वांछित प्रभाव हो सकता है: आईओएस 5

for (UIView *subview in theWebView.subviews) { 
    subview.clipsToBounds = NO; 
} 
9

के रूप में आप scrollview उपयोग कर सकते हैं UIWebView की संपत्ति, और पॉजिटोन समायोजित करने के लिए एक सामग्री सेट करें।

CGFloat top = 0.0; 

if(self.navigationController != nil && self.navigationController.navigationBar.translucent) { 
    top = self.navigationController.navigationBar.bounds.size.height; 
} 

UIWebView* wv = ... 

wv.scrollView.contentInset = UIEdgeInsetsMake(top, 0.0, 0.0, 0.0); 
+0

मैं आईओएस 5 के लिए इसका उपयोग करने की सलाह देता हूं। आईओएस 4 के मामले में, आप दृश्य को फिर से ढूंढ सकते हैं जहां किंडोफ क्लास है: [UIScrollView क्लास] के लिए सच है। फिर बस इस दृश्य पर सामग्री सेट करें (UIScrollView पर डाला गया)। – Prometheus

+0

यह मेरे लिए उचित समाधान की तरह दिखता है। – bio

0

आईओएस 7 के आगमन के साथ, ऑफसेट ऊंचाई को अब शीर्ष स्थिति क्षेत्र की ऊंचाई शामिल करने की आवश्यकता होगी। अन्यथा, आईओएस 7 उपकरणों में नेविगेशन बार के नीचे अभी भी 20 पिक्सल वेबव्यू छिपा होगा।

एक परियोजना iOS 7 और पुराने उपकरणों का समर्थन करने की आवश्यकता है, एक तरह एक मैक्रो here:

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 

पाया बहुत उपयोगी हो सकता है। एक zerotool के सहायक ऊपर सूचीबद्ध कोड के संस्करण संशोधित अब कुछ इस तरह दिखाई दे सकता है:

if (self.navigationController != nil && self.navigationController.navigationBar.translucent) { 
    top = self.navigationController.navigationBar.bounds.size.height; 
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { 
     top += [[UIScreen mainScreen] applicationFrame].origin.y; 
    } 
} 
// (etc.) 
3

सबसे आसान तरीका है स्थापित करने के लिए है:

webView.clipsToBounds = NO; 
webView.scrollView.clipsToBounds = NO; 

यह bouth iOS 7 & 6 पर काम करते हैं, और मैं नहीं था कोशिश नहीं करें, लेकिन आईओएस 5 पर शायद