2010-11-17 20 views
16

की छवि दृश्य को स्थितिबद्ध करना UITableView के प्रत्येक UITableViewCell में मैं अपनी छवि दृश्य में एक छवि डाल रहा हूं। हालांकि, अगर मैं एक सेल का उपयोग tableView की ऊंचाई बढ़ाने: heightForRowAtIndexPath: अधिक पाठ समायोजित करने के लिए, मैं पाया है कि:UITableViewCell

  1. छवि केन्द्र गठबंधन खड़ी है।
  2. छवि का बायां मार्जिन बढ़ता है। यह टेक्स्ट को सही तरीके से धक्का देता है, इसलिए इसके बाएं हाशिए को ऊपर और नीचे की कोशिकाओं में पाठ के साथ गठबंधन नहीं किया जाता है।

मैं छवि को लंबवत रूप से शीर्ष-संरेखित करना चाहता हूं, ताकि यह सेल के ऊपरी-बाएं कोने में (नीचे दी गई छवि में पहले सेल की तरह) हो और इसके बाएं मार्जिन में वृद्धि न हो (ताकि दूसरे सेल में पाठ का बायां हाशिए पहले सेल में पाठ के साथ संरेखित हो)।

छवि दृश्य के फ्रेम, केंद्र इत्यादि को बदलने से कोई प्रभाव नहीं पड़ता है। कोई विचार? धन्यवाद ...

(मैं इस समस्या की एक छवि है, लेकिन इतना मुझे एक छवि पोस्ट अभी तक क्योंकि मैं कम से कम 10 प्रतिष्ठा के साथ एक noob हूँ। गरर नहीं दूँगा ...)

उत्तर

0

आप एक कस्टम सेल बना सकते हैं और ऑब्जेक्ट्स रख सकते हैं जहां आपको उन्हें ऑटो मास्क मानों को सेट करने के साथ-साथ होना चाहिए।

6

जिस क्षण आपको लगता है कि आपको डिफ़ॉल्ट शैलियों में वस्तुओं के आकार या स्थिति को समायोजित करने की आवश्यकता है, वह समय है जब आपको अपनी खुद की वस्तुओं के साथ एक कस्टम सेल बनाने के बारे में सोचने की आवश्यकता होती है और जिस तरह से आप चाहते हैं उसे स्थानांतरित करते हैं। यही कारण है कि आप कस्टम सेल बना सकते हैं। :)

+0

अधिकार के रूप में सेल में जोड़ने के लिए है, तो आप सेल के "निर्मित" गुण उपस्थिति के साथ गड़बड़ होना चाहिए। – Rivera

+0

रिवेरा: आपको चाहिए? –

45

आप इस प्रकार, UITableViewCell उपवर्ग और layoutSubviews ओवरराइड करने के लिए की जरूरत है:

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.imageView.frame = CGRectMake(10, 10, 50, 50); // your positioning here 
} 

अपने cellForRowAtIndexPath में: विधि, अपने नए कोशिका प्रकार का एक उदाहरण वापस जाने के लिए सुनिश्चित करें।

+0

क्या आप समझा सकते हैं कि ऐप्पल दस्तावेज़ों में यह दृष्टिकोण कहां समझाया गया है? उदाहरण के लिए, आप imageView.frame = CGRectMake (10,10,50,50) क्यों नहीं कर सकते? (यह काम नहीं करता है, लेकिन मुझे पता नहीं चल रहा है कि यह क्यों काम नहीं करता है। ऐसा लगता है कि यह होना चाहिए) – Ian

+2

यह काम नहीं करता है क्योंकि सुपरक्लास लेआउट सबव्यूव्यू के कार्यान्वयन में लेआउट करता है। [सुपर लेआउटसब्यूव्यू] को कॉल करके सुपरक्लास इमेव व्यू और किसी भी अन्य लेबल/आइकन को स्थिति में रखेगा, और फिर आप उन्हें दोबारा बदल सकते हैं। – TomSwift

+0

यह समझने में सहायता कर सकता है कि UITableViewCell केवल एक UIView है, जो आपके लिए "सबके लिए" इन सबव्यू लेबल और छवियों का प्रबंधन और स्थिति भी रखता है।आप आसानी से पूरे सेल को खींचने और जो कुछ भी चाहते हैं उसे कर सकते हैं (उदाहरण के लिए गेंद के चारों ओर उछाल)। अनुकूलन वक्र में किसी बिंदु पर, यह वही है जो आपको करना चाहिए। उपमहाद्वीप टॉम सुझाव देता है कि उस रास्ते के साथ एक छोटा कदम है। –

1

एक वास्तव में उपयोगी फ़ंक्शन आपने कोशिश नहीं की हो सकती है (UITableViewDelegate में) tableView:willDisplayCell:forRowAtIndexPath: है। सेल को प्रदर्शित होने से पहले इसे तुरंत कहा जाता है और इसका उद्देश्य आपको लेआउट पर के बिना चीजों को करने में सक्षम बनाता है, ओएस इसे प्रदर्शित करने से पहले इसे संशोधित करता है। प्रभावी रूप से आपके पास कुल नियंत्रण है। मैंने इसे कोशिकाओं में फ़ॉन्ट बदलने के लिए उपयोग किया है, लेकिन आप सेल के सबव्यूज़ को फिर से सक्रिय कर सकते हैं और उनके फ्रेम भी संशोधित कर सकते हैं।

फिर भी मैं सहमत हूं कि आप उस बिंदु पर हैं जहां कस्टम कोशिकाओं को देखने और ओएस से लड़ना बंद करने का समय है। ऐसा करना मुश्किल नहीं है और ऐप्पल Table View Programming Guide for iOS में एक अच्छा उदाहरण देता है।

+0

मैंने ऐसा करने की कोशिश की लेकिन यह अभी भी मेरी तालिका दृश्य कक्ष के बीच में छवि को दोबारा बदल दिया: 'cell.imageView.frame = CGRectMake (10, 10, 50, 50);'। क्या आपको शायद एक विचार क्यों है? – Besi

+2

यह आईओएस 6 – Philip007

4

एक और तरीका है (आईओएस 6 में काम करता है) एक UIImageView बना सकते हैं और एक subview

UIImageView *yourImageView = [[UIImageView alloc] initWithFrame:CGRectMake(x,y,20,20)]; 

[yourImageView setImage:[UIImage imageNamed:[imagesArray objectAtIndex:indexPath.row]]]; //You can have an Array with the name of 

[yourcell.contentView addSubview:yourImageView]; //add the imageView as a subview 
+4

में काम नहीं करता है सीधे 'UITableViewCell' पर कस्टम दृश्य न जोड़ें। इसके बजाय, उन्हें 'contentView' ऑब्जेक्ट के अंतर्गत रखें। इस प्रकार सेल क्लास डिज़ाइन किया गया है। (ऐप्पल दस्तावेज़ीकरण देखें) यदि आप सीधे सेल पर दृश्य डालते हैं, तो यह अप्रत्याशित परिणाम हो सकता है। – Eonil