कॉलिंग setNeedsDisplay
सिर्फ आपके स्क्रॉल व्यू को फिर से निकालने जा रहा है, वास्तव में इसके अंदर की सामग्री को नहीं हटाएगा।
जैसा कि आपने पाया है, सभी स्क्रॉल व्यू सबव्यूज़ पर removeFromSuperview
पर कॉल करने से परिणामस्वरूप आपके स्क्रॉल बार कभी-कभी हटाए जा सकते हैं (महान नहीं)।
इसके चारों ओर कुछ दृष्टिकोण हैं: पहला एक अलग सरणी बनाए रखना है जिसमें आपके द्वारा स्क्रॉल व्यू में जोड़े गए सभी विचार शामिल हैं। इसके बाद आप इसके बजाय इस सरणी के माध्यम से फिर से शुरू कर सकते हैं। मेरे विचार में यह शायद सबसे अच्छा तरीका है।
for (UIView *view in self.contentView.subviews)
{
if (![view isKindOfClass:[UIImageView class]])
[view removeFromSuperview];
}
क्योंकि स्क्रॉल बार खुद को कर रहे हैं एक UIImageView
उपवर्ग यह उन्हें नहीं निकाला जाएगा:
अन्य, थोड़ा hacky, जिस तरह से विचारों का परीक्षण करने के रूप में आप उन के माध्यम से पुनरावृति है। लेकिन फिर, यदि आप छवि दृश्यों का उपयोग कर रहे हैं तो वे या तो हटाए नहीं जाएंगे, और भविष्य में आईओएस संस्करणों में कोई गारंटी नहीं है कि वे छवि दृश्य बने रहेंगे।
मेरे पहले दृष्टिकोण के साथ जाने के लिए बहुत बेहतर है और आपके द्वारा जोड़े गए सभी विचारों के साथ बस एक सरणी रखें।
निश्चित रूप से यह एक बेहतर विचार है, इससे पहले कभी नहीं सोचा था ... इसे एक ही समस्या वाले अन्य लोगों के लिए स्पष्ट करने के लिए: जब आप अपने स्क्रॉल व्यू में एक सबव्यूव जोड़ते हैं, तो उसे एक सरणी में भी जोड़ें। जब आप उन्हें हटाने की आवश्यकता देखते हैं, तो सरणी में पुनरावृत्त करें और बस उन्हें हटा दें FromSuperview। –