2014-09-25 8 views
14

मेरे पास बाधाओं के साथ एक UITableViewCell है ताकि आईफोन 6 और आईफोन 6+ पर सेल लेआउट सही ढंग से हो।UITableViewCell awakeFromNib गलत फ्रेम आकार

सेल सामग्री सही ढंग से सही ढंग से आकार बदलती है। हालांकि, मुझे अंदरूनी विचारों में से एक पर एक उपनगरीय ढाल खींचने की जरूरत है। ऐसा करने के लिए, मैं sublayer आकर्षित करने के लिए awakeFromNib का उपयोग कर रहा हूँ।

AwakeFromNib ऑटोरेसाइजिंग से पहले फ्रेम का आकार दे रहा है और इसलिए ढाल सबव्यू सही आकार नहीं है।

यदि मैं लेआउटसब्यूव्यू का उपयोग करता हूं, पहली बार इसे कॉल किया जाता है, तो आकार भी गलत होता है और सेल को सही आकार होने से पहले स्क्रॉल करने की आवश्यकता होती है; ताकि विधि

सही ढंग से आकर्षित करने के लिए सही फ्रेम आकार प्राप्त करने के लिए मुझे किस विधि का उपयोग करना चाहिए?

उत्तर

21

यह कोड मेरे लिए काम किया है, स्विफ्ट में लिखा गया है।

import UIKit 
import QuartzCore 

class DemoTableViewCell: UITableViewCell { 
    @IBOutlet weak var gradientView: UIView! 

    private let gl = CAGradientLayer() 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     // set gradient 
     let colors: [AnyObject] = [ 
      UIColor.clearColor().CGColor, 
      UIColor(white: 0, alpha: 0.8).CGColor 
     ] 
     gl.colors = colors 
     gradientView.layer.insertSublayer(gl, atIndex: 0) 
    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 

     // update gradient 
     gl.frame = gradientView.bounds 
    } 
} 
13

जागने के दौरान फ्रेम लेआउट प्रकट नहीं होते हैं। अपने कस्टम सेल पर आप इस

-(void)drawRect:(CGRect)rect 
{ 
    [super drawRect:rect]; 
    // Enter Custom Code 
} 

कर सकते हैं या तो या आप की तरह इस

-(void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes 
{ 
    [super applyLayoutAttributes:layoutAttributes]; 
    // Enter custom Code here 

} 

applyLayoutAttributes drawRect विधि से पहले कहा जाता है विधि applyLayoutAttributes ओवरराइड कर सकते हैं, लेकिन अभी भी रेक्ट के आकार parameteres है।

+1

लागूLayoutAttributes केवल संग्रह के लिए काम करता है Cells। मेरे UITableViewCell के लिए मैंने आपके drawRect का उपयोग किया: उत्तर - धन्यवाद! – amergin

+0

यह मेरे लिए काम करता था, लेकिन ओवरराइड ड्रॉरेक्ट आमतौर पर प्रदर्शन को कम करता है? –

3

@angshuk उत्तर सही है जहां कोई यूआईटीबल व्यूसेल के अंदर यूआई को संशोधित करना चाहता है। मेरे मामले की तरह मैं स्टोरीटाइम/ऑटोलायआउट का उपयोग करके UITableViewCell के अंदर रखे गए UIView पर रनटाइम पर एक अलग परत जोड़ने की कोशिश कर रहा था। awakeFromNib() & layoutSubviews() के अंदर भी एक ही चीज़ का प्रयास किया। कुछ भी काम नहीं किया।

स्विफ्ट का उपयोग कर एक ही कोड है। वैसे मैं स्विफ्ट 2.2 के साथ एक्सकोड 7.3.1 का उपयोग कर रहा हूं।

import UIKit 

class InviteMainCellClass: UITableViewCell { 

@IBOutlet weak var shareCodeLblSuperView: UIView! //Custom view added using IB/Autolayout 

override func awakeFromNib() { 
    super.awakeFromNib() 
    //shareCodeLblSuperView.addDashedBorderToView(self.shareCodeLblSuperView, viewBorderColor: UIColor.whiteColor(), borderWidth: 1.0) //Not worked 
} 

override func drawRect(rect: CGRect) { 
    super.drawRect(rect) 
    shareCodeLblSuperView.addDashedBorderToView(self.shareCodeLblSuperView, viewBorderColor: UIColor.whiteColor(), borderWidth: 1.0) //Worked 
} 



override func layoutSubviews() { 
    super.layoutSubviews() 
    //shareCodeLblSuperView.addDashedBorderToView(self.shareCodeLblSuperView, viewBorderColor: UIColor.whiteColor(), borderWidth: 1.0)//Not worked 
} 

आशा है कि इससे मदद मिलेगी। धन्यवाद।

+0

यह मेरे लिए काम करता था, लेकिन ओवरराइड ड्रॉरेक्ट आमतौर पर प्रदर्शन को कम करता है? –

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