2017-09-25 26 views
5

मैं करने के लिए जो मैं सफलतापूर्वक अतीत में एक ढाल पृष्ठभूमि लागू नए जोड़े subview भेजने वापस करने के लिए द्वारा एक UITableViewController है: हालांकि, यह अब काम करता हैsendSubviewToBack UITableView पर iOS में ठीक से काम नहीं 11

//performed on viewDidLoad 
UIView *bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1.5*280, 1.5*SCREEN_HEIGHT)]; 
bgView.backgroundColor = [UIColor yellowColor]; 
CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = bgView.bounds; 
gradient.startPoint = CGPointMake(0, 0); 
gradient.endPoint = CGPointMake(1, 1); 
UIColor *topColor = UIColorFromRGB(0x229f80); 
UIColor *bottomColor = UIColorFromRGB(0x621ad9); 
gradient.colors = [NSArray arrayWithObjects:(id)[topColor CGColor], (id)[bottomColor CGColor], nil]; 
[bgView.layer insertSublayer:gradient atIndex:0]; 
[self.view addSubview:bgView]; 
[self.view sendSubviewToBack:bgView]; 
bgView = nil; 

आईओएस 11 में और bgView वास्तव में सभी कोशिकाओं के शीर्ष पर रखा गया है।

enter image description here

किसी को भी जानता है कि मैं इसे ठीक कर सकते हैं? या शायद मैं इसे हर समय गलत कर रहा था?

+0

[self.view sendSubviewToBack: bgView]; इसके बजाए, इस विधि को आजमाएं - (शून्य) एक्सचेंजस्यूव्यूएट इंडेक्स: (एनएसआईएनटेगर) इंडेक्स 1 के साथ सबव्यूएट इंडेक्स: (एनएसआईएनटेगर) इंडेक्स 2 – Ellen

उत्तर

1

अपनी कोशिकाओं पारदर्शी हैं तो आप self.tableView.backgroundView = bgView;

0

इसे ठीक करने के लिए एक अन्य तरीका कोशिश कर सकते हैं कॉल करने के लिए tableView:willDisplayCell:forRowAtIndexPath: में [self.view sendSubviewToBack:bgView];

यह पारदर्शी नहीं भी कोशिकाओं के लिए काम करता है।

+0

लेकिन यह हर बार एक सेल प्रदर्शित होने पर सबव्यूव भेजने की कोशिश करेगा, जो मुझे लगता है कि अनावश्यक है। – CristiC

+0

यदि आप सेल को प्रदर्शित करते समय हर बार ऐसा नहीं करेंगे तो प्रत्येक नए सेल (सेलफोरो द्वारा लौटाया गया) इस दृश्य के तहत होगा। –

0

ऐसा प्रतीत होता है कि addSubview (UIView) sendSubview (toBack: UIView) अब आईओएस 11 में UITableViewControllers के लिए काम नहीं करता है। तो मैं इस के लिए स्वैप:

// in ViewDidLoad 
// set the backgroundImage 
    let backgroundImage = UIImageView(frame: self.view.bounds) 
    backgroundImage.image = UIImage(named: "background.png") 
//  self.view.addSubview(backgroundImage) // NO LONGER WORKS 
//  self.view.sendSubview(toBack: backgroundImage) // NO LONGER WORKS 
    self.tableView.backgroundView = backgroundImage 
0

आप पृष्ठभूमि दृश्य तालिका दृश्य के साथ एक साथ स्क्रॉल करने की आवश्यकता नहीं है, तो आप

self.tableView.backgroundView = bgView; 

उपयोग कर सकते हैं आप पृष्ठभूमि दृश्य की जरूरत है स्क्रॉल होने के लिए , परिवर्तन परत की zPosition एक नकारात्मक मूल्य के लिए यह आईओएस 11 में काम करने के लिए:

[self.view insertSubview:bgView atIndex:0]; 
bgView.userInteractionEnabled = NO; 
bgView.layer.zPosition = -1; 
संबंधित मुद्दे