2012-02-03 3 views
6

स्क्रॉल करते समय एक विशिष्ट यूटेबलव्यूसेल पंक्ति पंक्ति को बदलना मेरे पास 2 अनुभागों के साथ एक यूआईटीबलव्यू है, पहले खंड में 1 पंक्ति, और दूसरे खंड के लिए पंक्तियों की एक परिवर्तनीय राशि है। जब उपयोगकर्ता टेबल को स्क्रॉल करता है (उंगली ऊपर की तरफ बढ़ता है), तो टेबलव्यू यह डिफ़ॉल्ट बात करता है, लेकिन जब उपयोगकर्ता यूटेबलव्यू के शीर्ष पर होता है और नीचे स्क्रॉल करता है (उंगली नीचे की तरफ बढ़ती है) तो यह पहले सेल की तरह दिखना चाहिए पहले सेक्शन की ऊंचाई बढ़ जाती है जितनी उपयोगकर्ता स्क्रॉल करता है (और स्पर्श को छोड़कर पंक्ति की ऊंचाई 100 की मूल ऊंचाई पर बदल जाएगी)। मैंयूटेबलव्यू

-(void)scrollViewDidScroll:(UIScrollView*)scrollView{ 
    if(scrollView.contentOffset.y < 0){ 
     [mainTable reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection: 0]] withRowAnimation:UITableViewRowAnimationNone]; 
    } 
} 

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath{ 
    if(indexPath.section == 0 && tableView.contentOffset.y < 0){ 
     return -tableView.contentOffset.y+100;//Default height is 100 
    } 
} 

की कोशिश की लेकिन reloadRows विधि 0 contentOffset रीसेट करता है तो tableview सिर्फ stutters जब मैं नीचे खींच। ऐसा लगता है कि यह काम नहीं करता है, तो मुझे यूआईएसक्रोल व्यू पर सबकुछ लिखना होगा और यह रीसाइक्टेबल कोशिकाओं के बिना एक बड़ा दर्द जैसा लगता है।

क्या किसी के पास कोई सुझाव है?

उत्तर

9

पंक्ति को पुनः लोड करने की कोई आवश्यकता नहीं है, मैंने बस फ्रेम को सीधे बदल दिया है। सुनिश्चित करें कि आप cell.layer.masksToBounds = YES सेट करते हैं और सेल में उप-दृश्य मूल सेल ऊंचाई से बड़े होने के लिए बनाते हैं।

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    if (mainTable.contentOffset.y < 0) { 
     UITableViewCell *cell = [mainTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 
     float rawr = mainTable.contentOffset.y; 
     cell.frame = CGRectMake(cell.frame.origin.x, rawr, cell.frame.size.width, 100-rawr); 
    } 
}