2013-11-20 4 views
11

मेरे पास मेरे ऐप में UINavigationController है। UINavigationBar अपारदर्शी पर सेट है और सभी स्क्रॉल दृश्य बार के नीचे ओवरलैप नहीं होते हैं।आईओएस 7 यूआईआरफ़्रेश नियंत्रण नियंत्रण सामग्री बदलता है

एक दृश्य में मेरे पास UITableView है। UITableView का फ्रेम (0 0; 320 504) है जो मेरे आईफोन 5 पर है। यानी ऊंचाई 568 - 64 (एनएवी बार और स्टेटस बार की ऊंचाई) है।

UITableView(0, 0, 0, 0) है। जब तालिका दृश्य पहले लोड होता है contentOffset(0, 0) है।

यह ठीक है। शानदार ढंग से काम करता है।

मैंने तालिका दृश्य में UIRefreshControl जोड़ा। यह दो बार काम करता है लेकिन फिर रीफ्रेश करने के लिए खींचने के कुछ समय बाद शीर्ष पर सामग्री एनवी बार के नीचे "अटक" हो जाती है।

जब ऐसा होता है तो मैं contentInset का निरीक्षण करता हूं और अब यह (-60, 0, 0, 0) है।

क्या UIRefreshControl को contentInset बदलने से रोकने का कोई तरीका है?

+0

ने मेरा जवाब हटा दिया क्योंकि आप पहले से ही इसे अस्वीकार कर चुके हैं। आप अंतराल को बुला रहे हैं, मुझे लगता है? – jhilgert00

+0

कोई चिंता नहीं। हाँ, जब मैं नियंत्रण पर 'एंडरफ्रेशिंग' कहता हूं तो यह गायब हो जाता है। यह कुछ बार ठीक काम करता है लेकिन फिर यह निकलता है और 'contentInset' नेविगेशन बार के नीचे शीर्ष कुछ पंक्तियों को छिपाने में परिवर्तन करता है। – Fogmeister

+0

रीफ्रेश के बाद आप शायद अपने फ्रेम को रीसेट करने से दूर हो सकते हैं, लेकिन आपको यह नहीं करना चाहिए। – jhilgert00

उत्तर

6

शायद यही वजह है कि UIRefreshControl वर्तमान में केवल UITableViewController पर समर्थित है, इसके बजाय किसी भी स्क्रॉलव्यू (जिसे आप कई मामलों में दूर कर सकते हैं) के अतिरिक्त।

रीफ्रेश नियंत्रण स्क्रॉलव्यू की सामग्री प्रविष्टियों के साथ टंकण करके अपने जादू को करता है - खासकर जब यह ताज़ा हो जाता है। दुर्भाग्य से व्यू कंट्रोलर पारदर्शी नौसेना और स्टेटस बार के तहत फिट करने के लिए स्क्रॉल व्यू के सामग्री इन्सेट्स के साथ भी झुका रहा है। मज़ा आता है। क्या यह आईओएस 6 (या, "अच्छा पुराना आईओएस 6" पर भी एक मुद्दा है जैसा कि मैंने उसी मुद्दे से निपटने के दौरान इसे बुलाया था)।

सबसे तेज़ समाधान शायद एक साधारण सबव्यू के बजाय एक बच्चे UITableViewController के रूप में अपना टेबल दृश्य जोड़ने के लिए है। मुझे लगता है कि UITableViewController ताज़ा करने के अंत में आपके लिए इन्सेट प्रबंधित करता है। अगर यह काम नहीं करता है, तो मुझे इसके लिए कामकाज मिल गया है, लेकिन मुझे कार्यालय में वापस आने तक इंतजार करना होगा।

+1

मुझे लगता है कि अब यह तय हो गया है। मुझे एहसास हुआ कि 'NSOperation' के 'समापनब्लॉक' को ऑपरेशन के समान थ्रेड पर बुलाया जाता है। यह वह जगह है जहां मैं 'एंडरफ्रेशिंग' कह रहा था। मैंने इसे मुख्य धागे पर भेज दिया और यह अब 'contentInset' को बदले बिना काम कर रहा है। क्या आपके पास 'UIRefreshControl' के बारे में कुछ भी आधिकारिक तौर पर 'यूआईटीवीसी' का समर्थन करने का लिंक है? – Fogmeister

+0

दस्तावेज़ कहते हैं कि इसे एक यूआईटीवीसी को सौंपा गया है। AddSubview: चीज का उल्लेख केवल एसओ पर किया गया है, कभी भी दस्तावेज़ों में नहीं। – jrturton

+0

इस उत्तर पर डेव डीलॉन्ग की टिप्पणी देखें: http://stackoverflow.com/a/12502450/852828 – jrturton

3

अपनी तालिका दृश्य सामग्री रीसेट करें।

-(void)pullToRefresh 
{ 
    [self.tableView reloadData]; 
    [self.refreshControl endRefreshing]; 
    [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)]; 
} 
2

आप setContentInset ओवरराइड जरूरत है: आप में UICollectionView

- (void)setContentInset:(UIEdgeInsets)contentInset { 
    if (self.tracking) { 
    CGFloat difference = contentInset.top - self.contentInset.top; 
    CGPoint translation = [self.panGestureRecognizer translationInView:self]; 
    translation.y -= difference * 3.0/2.0; 
    [self.panGestureRecognizer setTranslation:translation inView:self]; 
    } 
    [super setContentInset:contentInset]; 
} 
+0

यूआरएल के साथ UIRefreshControl का उपयोग करने से बचना है, जो आपने उल्लेख किया है, – Nagarjun

6

मैं इस सवाल का जवाब यहाँ मामले में किसी भी एक समस्या है UIRefreshControl साथ नियंत्रण गुण (जिम्मेदार ठहराया शीर्षक, टिंट, आदि को बदलने के द्वारा जोड़ देगा .. ।):

UIRefreshControl-viewDidLoad: पर गड़बड़ न करें, इसके बजाय -viewDidAppear: का उपयोग करें।

+1

यह सुनिश्चित नहीं है कि यदि आप अपना पेज प्रकट करते हैं तो यह एक शर्त डालता है, तो इसे रीफ्रेश कंट्रोल जोड़ें। – George

+0

मेरी समस्या धन्यवाद फिक्स्ड। –

संबंधित मुद्दे