UITableViewCell उपवर्ग के साथ "ऑटो लेआउट अभी भी निष्पादित करने के बाद आवश्यक है"


115

XCode 4.5 और iOS 6 का उपयोग करते हुए, मैं कस्टम सेल के साथ एक साधारण टेबल व्यू के साथ एक ऐप विकसित कर रहा हूं। मैंने इसे आईओएस 5 और नीचे में सौ बार किया है, लेकिन किसी कारण से नया ऑटो लाईट सिस्टम मुझे बहुत परेशानी दे रहा है।

मैंने IB में अपना टेबल व्यू और प्रोटोटाइप सेल सेटअप किया, सबव्यू जोड़े और IBOutlets के रूप में उन्हें वायर्ड किया और फिर अपने डेलिगेट और डेटा स्रोत को सेटअप किया। हालाँकि अब जब भी पहली सेल से लाया जाता है cellForRowAtIndexPath, मुझे निम्न त्रुटि मिलती है:

*** में जोरदार विफलता - [शॉपक्लूज़ लेआउटसुबलेर्सऑफलाइन:], / स्रोतCसच / यूटीआईटी_सिम / यूआईटिट २2३// यूइवीवाई 77776६

*** अनकहा अपवाद 'NSInternalInconsistencyException' अपवाद के कारण समाप्ति ऐप, कारण: 'ऑटो लेआउट अभी भी आवश्यक है -लेआउटसुबह निष्पादित करने के बाद। ShopCell के -layoutSubviews के कार्यान्वयन को सुपर कॉल करने की आवश्यकता है। '

मैंने अपने उपवर्ग सेल (ShopCell) में एक alayoutSubviews विधि को लागू नहीं किया है, और यहां तक ​​कि जब मैं ऐसा करने की कोशिश करता हूं और सुपर कॉल जोड़ता हूं क्योंकि यह बताता है कि मुझे अभी भी वही त्रुटि मिलती है। अगर मैं IB में सेल से सबव्यू हटाता हूं, और इसे एक मानक UITableViewCell में बदल देता हूं, तो सब कुछ अपेक्षित रूप से काम करता है, हालांकि निश्चित रूप से मैं अपनी कोशिकाओं में कोई डेटा नहीं छोड़ रहा हूं।

मैं लगभग निश्चित हूं कि मैं कुछ सरल हूं जो मुझे याद आ रहा है, लेकिन मैंने क्या गलत किया है यह सुझाव देने के लिए कोई दस्तावेज या मार्गदर्शिका नहीं मिल सकती है। किसी भी सहायता की सराहना की जाएगी।

संपादित करें: बस इसे IB में UITableViewCell में बदलने और सभी साक्षात्कारों को एक ही स्थान पर छोड़ने की कोशिश की, अभी भी वही त्रुटि है।


lldb [[UIWindow keyWindow] _autoLayoutTrace]यदि स्वचालित लेआउट का उपयोग किया जाता है, तो डिबगर क्षेत्र में प्रयास करें ।
ए-लाइव

3
क्या आप UITableViewCell के बजाय कस्टम सेल के लिए UIView का उपयोग कर रहे हैं? मुझे भी यही समस्या थी। मेरे पास कस्टम सेल के लिए UIView था और उस पर उप विचार जोड़ रहा था। UITableViewCell में बदल गया और इसने काम किया।

हे माइक, आप आउटलेट्स को कैसे परिभाषित कर रहे हैं? क्या वे एक क्लास एक्सटेंशन में आपकी कार्यान्वयन फ़ाइल में गुण हैं?
कोकोडुदे

@ ए-लाइव जब भी मैं उस विधि का उपयोग करने की कोशिश करता हूं मुझे डिबगर में एक त्रुटि मिलती है .... क्या यह विधि अभी भी वैध है? संपादित करें: कोई बात नहीं, यह ऑटोलॉययट में एक लोअरकेस एल है।
बोरोरडेन

फिर इंस्पेक्टर में ऑटोलेउट बॉक्स को अनचेक करें और फिर साफ करें। यह काम करेगा।
निको

जवाबों:


57

कोड में मैन्युअल रूप से बाधाओं को जोड़ते समय मुझे एक ही समस्या का सामना करना पड़ा। कोड में, मैं निम्नलिखित कर रहा था:

{
    [self setTranslatesAutoresizingMaskIntoConstraints:YES];
    [self addSubview:someView];
    [self addSubview:someOtherView];
    [self addConstraint:...];
}

परिकल्पना

मैं जो बता सकता हूं, वह मुद्दा यह है कि जब आप अक्षम करते हैं translatesAutoresizingMaskIntoConstraints, तो UITableViewCell ऑटो लेआउट का उपयोग करना शुरू कर देता है और स्वाभाविक रूप से विफल हो जाता है क्योंकि अंतर्निहित कार्यान्वयन layoutSublayersForLayerसुपर कॉल नहीं करता है। हॉपर या कोई अन्य उपकरण वाला कोई व्यक्ति इसकी पुष्टि कर सकता है। चूंकि आप आईबी का उपयोग कर रहे हैं, आप शायद सोच रहे हैं कि यह एक मुद्दा क्यों है ... और ऐसा इसलिए है क्योंकि आईबी का उपयोग स्वचालित रूप से translatesAutoresizingMaskIntoConstraintsउन विचारों के लिए अक्षम करता है जो इसमें बाधाएं जोड़ता है (यह स्वचालित रूप से उनकी जगह में चौड़ाई और ऊंचाई की बाधा जोड़ देगा)।

उपाय

मेरा समाधान सब कुछ करने के लिए आगे बढ़ना था contentView

{
   [self.contentView addSubview:someView];
   [self.contentView addSubview:someOtherView];
   [self.contentView addConstraint:...];
}

मुझे 100% यकीन नहीं है कि यह इंटरफ़ेस बिल्डर में काम करेगा, लेकिन यदि आप अपने सेल से सब कुछ धक्का देते हैं (यह मानते हुए कि आपके पास सीधे कुछ है) तो यह काम करना चाहिए। आशा है कि यह आपकी मदद करता है!


4
मुझे subview.translatesAutoresizingMaskIntoConstraints = NO'प्रत्येक दृश्य पर जोड़ने की आवश्यकता है जो मैं contentView में जोड़ रहा था।
Jay Peyer

5
इसने मेरे लिए काम किया। इसके अलावा, सुनिश्चित करें कि आप कॉल नहींself.contentView.translatesAutoresizingMaskIntoConstraints = NO करते हैं UITableViewCell
मोरिज़ियो

53

जाहिरा तौर पर, UITableViewCell के लेआउटसुबंस कार्यान्वयन सुपर को कॉल नहीं करता है, जो ऑटो लेआउट के साथ एक समस्या है। मुझे यह देखने में रुचि होगी कि परियोजनाओं में नीचे की श्रेणी को छोड़ने से चीजें ठीक होती हैं या नहीं। इसने एक परीक्षण परियोजना में मदद की।

#import <objc/runtime.h>
#import <objc/message.h>

@implementation UITableViewCell (FixUITableViewCellAutolayoutIHope)

+ (void)load
{
    Method existing = class_getInstanceMethod(self, @selector(layoutSubviews));
    Method new = class_getInstanceMethod(self, @selector(_autolayout_replacementLayoutSubviews));

    method_exchangeImplementations(existing, new);
}

- (void)_autolayout_replacementLayoutSubviews
{
    [super layoutSubviews];
    [self _autolayout_replacementLayoutSubviews]; // not recursive due to method swizzling
    [super layoutSubviews];
}

@end

मैं तालिका सेल पर एक पृष्ठभूमि दृश्य का उपयोग करते समय मेरे लिए दिखाई गई समस्या को जोड़ सकता हूं, क्योंकि यह सेल के लिए एक उप-भाग के रूप में जुड़ जाता है (जबकि अधिकांश साक्षात्कार तालिका सेल के contentView में जोड़ा जाना चाहिए, जो आमतौर पर बेहतर काम करना चाहिए)।

नोट: ऐसा लगता है कि यह बग iOS7 में तय किया गया है; मैं इस कोड को निकालने में सक्षम था, या कम से कम एक रनटाइम जांच जोड़ सकता था ताकि यह केवल iOS6 पर चलने पर ही हो।


अजीब बात यह है कि यह मेरे लिए एक सादे UITableViewCell के साथ ठीक काम करता है, बस एक उपवर्ग के लिए नहीं ...
borrrden

आपको लगता है कि होगा, लेकिन मेरे पास एक init विधि है, और कुछ नहीं> <। मैंने अपने जीवन में लेआउट को कभी नहीं देखा है। मुझे लगता है कि समस्या कस्टम दृश्य है जिसे UITableViewCell अपने मूल दृश्य के रूप में उपयोग करता है क्योंकि यह लेआउट का उपयोग नहीं कर सकता क्योंकि यह लेआउट को देखता है (इसलिए जब आप रूट दृश्य में बाधाओं को जोड़ने का प्रयास करते हैं, तो यह विफल हो जाएगा)
borrrive

6
मुझे UITableViewउसी कारण (iOS 6.1 b1) के लिए इस तरह की एक श्रेणी बनानी थी
जोशुआ जे। मैकिनॉन

5
क्या TableHeaderView के लिए भी कुछ ऐसा ही तय है क्योंकि समस्या अभी भी ios 7 में मौजूद है?
सॉफ्टलियन

1
यह बहुत अच्छा काम करता है। जब मैं एक UITableView में एक UIVIew सबव्यू को केंद्रित करने का प्रयास करता हूं तो मुझे इस मुद्दे का सामना करना पड़ा। आईओएस 7 में भी जोर होता है। लेकिन यह iOS 8 में नहीं होता है, इसलिए उन्होंने बग को संबोधित किया होगा।
जॉर्डन एच

33

मेरे पास कुछ महीनों के लिए एक ही बग था। लेकिन मैंने पाया कि क्या समस्या थी।

जब मैं एक आईबी फ़ाइल बनाता हूं, UIViewतो पहले से ही एक जोड़ा जाता है। यदि आप इस दृश्य का उपयोग करते हैं, तो ऑटो लेआउट अक्षम होने पर ऐप क्रैश नहीं होता है (लेकिन अन्य समस्याएं हैं)। जब आप ऑटो लेआउट का उपयोग करते हैं, तो आपको ऑब्जेक्ट लाइब्रेरी में सही दृश्य का चयन करना होगाUITableViewCell :।

वास्तव में, आपको हमेशा इस आइटम का उपयोग करना चाहिए क्योंकि सभी सबव्यूज़ को इसमें जोड़ा जाता contentViewहै UITableViewCell

बस इतना ही। सब ठीक होगा।


यह स्वीकृत उत्तर नहीं होना चाहिए क्योंकि प्रश्न आईबी का उपयोग करते हुए कार्यान्वयन के बारे में नहीं है, और क्योंकि यह समस्या तब हो सकती है जब आप आईबी का उपयोग नहीं कर रहे हैं। यदि आप अपने विचार कार्यक्रम के अनुसार कर रहे हैं, तो @ फिलोडेन का उत्तर अधिक व्यवहार्य है।
एरिक

मुझे उत्तर समझ में नहीं आया। क्या कोई और अधिक स्पष्ट रूप से समझा सकता है? धन्यवाद
हसन १an

मुझे लगता है कि मेरा वह अधिकार है। क्या यह क्लास अटैच की जाँच करने के लिए पर्याप्त है। इंटरफ़ेस बिल्डर में पहचान निरीक्षक में? या जो जोड़ा गया है वह एक अन्य प्रकार और वर्ग का था। बाद में अद्यतन किया गया है? क्या यह भी समस्या का कारण है?
हसन

@ hasan83 आप वास्तव में सेल वापस कर सकते हैं। UITableViewCell मूल रूप से एक पुन: उपयोग पहचानकर्ता के साथ एक UIView है।
अरनौद

17

मुझे कस्टम UITableViewHeaderFooterView+ xib से समान परेशानी थी ।

मुझे यहाँ कुछ उत्तर दिखाई दिए, लेकिन मैंने पाया कि -layoutSubviewsमेरे कस्टम पाद दृश्य वर्ग फ़िक्सेस समस्या में क्या लागू होता है:

-(void)layoutSubviews
{
    [super layoutSubviews];
    [self layoutIfNeeded]; // this line is key
}

1
खबरदार है कि इस अंतहीन लूप अंत में परिणाम कर सकते हैं और EXC_BAD_ACCESS KERN_PROTECTION_FAILURE
एमबीआई

15

मैं लेआउटसुब्यू के मेरे कार्यान्वयन में बाधाओं को संशोधित करने के परिणामस्वरूप देख रहा था। कॉल को सुपर से शुरू करके विधि के अंत तक समस्या को ठीक किया।


इसने मेरे लिए काम किया। मेरे पास एक कस्टम UICollectionViewCell है, जो मैं लेआउट प्रारूप में देख रहा हूं। किसी को पता है कि यह समाधान हालांकि काम क्यों करता है?
STANGMMX

@STANGMMX, A'sa डिकेन्स का उत्तर बताता है कि क्यों।
फाबियो ओलिवेरा

15

आईओएस 7 (iOS 8 को ठीक करने के लिए लगता है) में भी यही समस्या थी। मेरे लिए समाधान यह था [self.view layoutIfNeeded]कि मैं अपने viewDidLayoutSubviewsतरीके के अंत में फोन करूं ।


धन्यवाद। यह मेरी मदद करता है। मैं कल (iOS 7 पर) इस समस्या से मिला। यह iOS 7. के लिए मदद करता है
अलेक्जेंडर

@MaciejSwic शीर्ष पर मेरा उत्तर देखें।
साउंड ब्लास्टर

यह मेरे लिए काम किया! स्विफ्ट के साथ iOS 7.1 का उपयोग करना। मैं viewDidLayoutSubviews पर एक बाधा हटा रहा था और जोड़ रहा था। मैंने सुपर कॉल को हटा दिया और यह अभी भी काम नहीं कर रहा था, लेकिन इस समाधान ने चाल चली! इस डायनासोर को एक पत्ता दो! :)
जॉम्फर

मेरे लिए भी iOS 7.1 का उपयोग कर काम किया!
fdlr

14

मेरी भी यही समस्या थी। समस्या उस तरह से थी जैसे मैं सेल एक्सिब बना रहा था। मैंने सामान्य की तरह एक Xib बनाया और डिफ़ॉल्ट "UIView" के प्रकार को अपने कस्टम UITableViewCell वर्ग में बदल दिया। सही तरीका यह है कि पहले डिफॉल्ट व्यू को डिलीट करें और फिर टेबल व्यू सेल ऑब्जेक्ट को xib पर खींचें। यहाँ अधिक जानकारी: http://allplayers.github.io/blog/2012/11/18/Custom-UITableViewCell-With-NIB/


1
सही अंतर्दृष्टि! मैं यह महसूस करने के लिए उम्र लेता हूँ, विशेष रूप से क्योंकि मेरे ऐप्स दुर्घटनाग्रस्त हो जाते हैं अगर मैं एक उपयोगकर्ता को AutoLayout अक्षम कर देता हूं।
गिलहर्मे

उत्तम! नीचे @Arnaud का उत्तर भी देखें
लब्बू

7

मैंने अपने कस्टम टेबल व्यू सेल के सभी साक्षात्कारों के लिए "ऑटोलेयूट" को बंद करके समस्या का समाधान किया।

कस्टम सेल के लिए xib में, एक सबव्यू चुनें और फ़ाइल इंस्पेक्टर को अनचेक करें> इंटरफ़ेस बिल्डर डॉक्यूमेंट> ऑटोलैयूट का उपयोग करें


4
मैने भी वही कीया। वास्तव में एक समाधान नहीं है, हालांकि अगर आप
ऑटोलाययूट

7

मुझे इसी तरह की समस्या नहीं थी UITableViewCell, बल्कि UITableViewखुद पर थी। क्योंकि यह Google का पहला परिणाम है जिसे मैं यहाँ पोस्ट करूँगा। यह पता चला कि viewForHeaderInSectionसमस्या थी। मैंने बनाया UITableViewHeaderFooterViewऔर सेट translatesAutoresizingMaskIntoConstraintsकिया NO। अब यहाँ आता है दिलचस्प हिस्सा:

आईओएस 7:

// don't do this on iOS 7
sectionHeader.translatesAutoresizingMaskIntoConstraints = NO;

अगर मैं ऐसा करता हूं तो ऐप क्रैश हो जाता है

ऑटो लेआउट अभी भी -layoutSubviews को क्रियान्वित करने के बाद आवश्यक है। UITableView के -layoutSubviews के कार्यान्वयन को सुपर कॉल करने की आवश्यकता है।

ठीक है, मैंने सोचा था कि आप एक टेबल व्यू हेडर पर ऑटो लेआउट का उपयोग नहीं कर सकते हैं और केवल साक्षात्कार पर। लेकिन यह पूर्ण सत्य नहीं है जैसा कि आप इसे बाद में देखते हैं। योग करने के लिए: आईओएस 7. पर हेडर के लिए ऑटो रिसाइज़िंग मास्क को अक्षम न करें अन्यथा यह ठीक काम कर रहा है।

iOS 8:

// you have to do this, otherwise you get an auto layout error
sectionHeader.translatesAutoresizingMaskIntoConstraints = NO;

अगर मैं इसका उपयोग नहीं करता तो मुझे निम्नलिखित आउटपुट मिलेगा:

एक साथ बाधाओं को संतुष्ट करने में असमर्थ।

IOS 8 के लिए आपको हेडर के लिए ऑटो रीसाइज़िंग मास्क को निष्क्रिय करना होगा।

पता नहीं क्यों यह इस तरह से व्यवहार करता है लेकिन ऐसा लगता है कि Apple ने iOS 8 में कुछ चीजों को ठीक किया और iOS 7 और iOS 8 पर ऑटो लेआउट अलग तरह से काम कर रहा है।


मेट तुम सिर्फ मेरा दिन बचाओ!
मार्सिन मैलेसिज

5

जैसा कि ऊपर किसी ने पहले ही कहा है, जब आप UITableView में उपयोग के लिए एक दृश्य बनाते हैं, तो आपको डिफ़ॉल्ट रूप से बनाए गए दृश्य को हटाना होगा और UITableViewCell या UITableViewHeaderFooterView को रूट दृश्य के रूप में खींचें। हालाँकि, XIB को ठीक करने का एक तरीका है यदि आपने उस भाग को याद नहीं किया है। आपको XIB फ़ाइल को एक टेक्स्ट एडिटर और रूट टैग में खोलना होगा और इसका सीधा बच्चा उदाहरण के लिए विशेषता translatesAutoresizingMaskIntoConstraintsको जोड़ना / बदलना होगाYES

<view contentMode="scaleToFill" horizontalHuggingPriority="1000" id="1" translatesAutoresizingMaskIntoConstraints="YES" customClass="MXWCollapsibleTableHeaderView">


2

मैं इसका सामना कर रहा हूं और ऐसा लगता है कि यह UITableViewCell उपवर्गों से संबंधित प्रोटोटाइप कोशिकाओं के रूप में है जो विशेष रूप से अन्य कस्टम UIView उपवर्गों को उनके साथ जोड़ा गया है। मैं यहां 'रिवाज' पर जोर देता हूं क्योंकि मैं उन कोशिकाओं के साथ सफल रहा हूं जिनमें सिर्फ UIKit बच्चे हैं, लेकिन यह तब खत्म हो जाता है जब मैंने उन विचारों के लिए बाधाओं का निर्माण करने की कोशिश की, जो मैंने लेखक के प्रश्न में बताई गई त्रुटि को फेंकते हुए बनाए हैं।

मुझे अपनी कोशिकाओं को स्वतंत्र nibs में अलग करना पड़ा है जो AutoLayout का उपयोग नहीं करते हैं।

आइए आशा करते हैं कि Apple इस गंदगी को साफ करेगा।


2

सेल के बजाय सेल के contentView में अपने सबव्यू जोड़ें। इसलिए इसके बजाय:

[self addSubview:someView];

तुम्हें अवश्य उपयोग करना चाहिए

[self.contentView addSubview:someView];


1

मुझे इसका सामना करना पड़ा क्योंकि मैंने शुरू में एक यूआईटेबल व्यूसेल के बजाय एक यूआईबीवी को एक एक्सिब फाइल में जोड़ा था।


1

मैंने backgroundViewअपनी पृष्ठभूमि से कनेक्टर को अनचेक करके UIImageViewऔर accessoryViewअपने UIButtonकस्टमाइज़ेशन से कनेक्टर को हटाकर इस त्रुटि को समाप्त कर दिया । मुझे संदेह है कि ये उन तरीकों का इस्तेमाल करने के लिए नहीं थे जो मैं उन्हें इस्तेमाल कर रहा था।


1

मैं आज पहली बार इस मुद्दे पर आया था। अब तक मुझे प्रोटोटाइप UITableViewCell उपवर्गों का उपयोग करने में कुछ विभिन्न अनुभव थे, लेकिन इस मुद्दे में कभी नहीं भागे। मैं जिस सेल के साथ काम कर रहा था, उसके बारे में क्या अलग था कि मेरे पास thebackgroundView के लिए एक IBOutlet था जिसे मैं सेल को कलर करने के लिए उपयोग कर रहा था। मैंने पाया कि अगर मैंने एक नई संपत्ति बनाई और फिर भी एक नया यूआईईयूवाई जोड़ा, जिसने पूरे सेल के फैलाव को बढ़ाया, तो यह जोर से चला गया। इस कारण को सत्यापित करने के लिए, मैं इस दृश्य को पृष्ठभूमि दृश्य आउटलेट में संलग्न करने के लिए वापस चला गया और जोर से फिर से प्रकट हुआ। अब तक, एक उपवर्गित प्रोटोटाइप UITableViewCell में AutoLayout का उपयोग करते हुए कोई अन्य समस्या नहीं है क्योंकि मैंने यह परिवर्तन किया है।


1

मुझे इस समस्या का कोई उचित समाधान नहीं मिला, लेकिन आप इसका उपयोग करके फ़्रेमों को ठीक कर सकते हैं और ट्रांसलेट्स सेट नहीं कर सकते हैं। कोई खाता नहीं (डिफ़ॉल्ट रूप से हां, इसलिए इसे सेट न करें)

CGRect headerViewFrame = CGRectMake(0,0,320,60); //Frame for your header/footer view
UIView *tableHeaderView = [[UIView alloc] initWithFrame:headerViewFrame];
tableHeaderView.translatesAutoresizingMaskIntoConstraints = Yes; //Or don't set it at all
[self.tableView setTableHeaderView:tableHeaderView];

0

मैं एक ही चीज का अनुभव कर रहा हूं। यह पता चला है कि यदि आप प्रोग्रामेटिक रूप से अपने ShopCell .xib / स्टोरीबोर्ड से एक सबव्यू जोड़ते हैं, जो ऑटो लेआउट का उपयोग करता है, तो एक अन्य दृश्य के लिए एक सबव्यू के रूप में, उस अपवाद को फेंक दिया जा सकता है, यह इस बात पर निर्भर करता है कि आपकी बाधाओं को कैसे कॉन्फ़िगर किया गया है। मेरा अनुमान है कि आईबी में बनाई गई बाधाएं वह होती हैं जो एक दृश्य को सबव्यू के रूप में जोड़ते समय परेशानी पैदा करती हैं, क्योंकि यह तब व्यूअ से बाधाओं को मेनटेन कर रहा है -> व्यूबी इस बीच आप व्यूबी को व्यूसी के सब-वे के रूप में जोड़ सकते हैं। आपको यह मिल गया (यह वाक्य खुद को भ्रमित कर रहा है)?

मेरी स्थिति में - चूंकि यह बहुत ही सरल विचार था जो समस्या का कारण था - मैंने विचारों को प्रोग्रामेटिक रूप से बनाया और आईबी में नहीं। इससे हल हो गया। आप अन्य xib फ़ाइलों के लिए उन दृश्यों को निकाल सकते हैं और उन लोगों के लिए ऑटो लेआउट को अक्षम कर सकते हैं। मुझे लगता है कि काम करेगा।


0

कुछ स्थितियों में, यह लेआउट समस्या को आसानी से हल करता है (आपके लेआउट के आधार पर)। आपके अंदर UITableView सबक्लास, या तो awakeFromNib या init में, ऑटोरेस्ज़िंग मास्क सेट करें:

self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

डिफोट द्वारा इसे UIViewAutoresizingNone पर सेट किया जाता है


इससे मुझे जो समस्या आ रही थी, वह हल हो गई। मैं [tableViewCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].heightऊंचाई पाने के लिए एक टेबल सेल के भीतर ऑटो-लेआउट का उपयोग कर रहा हूं , जिसे मैं तब उपयोग करता हूं heightForRowAtIndexPath
नाथनअल्डनश्री

0

मेरे मामले में,

UITableView के लिए ऑटो लेआउट के लिए संदर्भित UIImageView UITableView की पृष्ठभूमि में दिया गया है।

self.tableView.backgroundView = self.tableBackgroundImageView;

इसलिए, मैंने UIImageView को UIVIV (रूट दृश्य) से पृष्ठभूमि दृश्य के लिए हटा दिया और उस UIImageView के लिए सभी ऑटो लेआउट संदर्भ को रीसेट (निकालें) कर दिया। मैंने उस UIImageView को UIView (रूट व्यू) के बाहर से बैकग्राउंड के लिए रखा। और फिर कोड में UITableView की पृष्ठभूमि में असाइन करें।

फिर तय किया गया।


0

मैंने इसका हल ढूंढ लिया है।

मेरे मामले में, मैंने स्टोरीबोर्ड में सेल का दृश्य बनाया (ऑटो लेआउट सक्षम होने के साथ) और मैंने अपने ViewController.m में कस्टम UITableViewCell इंटरफ़ेस को परिभाषित किया, मुझे इंटरफ़ेस को ViewController.h पर ले जाना है।


0

मुझे उसी समस्या का सामना करना पड़ा जब मैं कस्टम UITableViewCell बनाने के लिए स्टोरीबोर्ड का उपयोग करता हूं। सौभाग्य से मुझे समस्या का पता चला, क्योंकि मैं एक्सेसरी व्यू ([यूआईटेबल व्यूसेल सेटअवेटरी व्यू:]) को यूआईब्यूट्टन को आउटलेट करता हूं जो मैंने सेल में जोड़ा था।

तो यह मेरे प्रोजेक्ट में आईओएस 6 पर चलने पर हुआ।

उपाय

मैं एक्सेसरी व्यू और मेरे बटन के बीच आउटलेट जारी करता हूं जिसमें कस्टम सेल होता है।

प्रस्ताव

आपको UITableViewCell के मूल तत्वों का उपयोग नहीं करना चाहिए और इसे बदलना चाहिए।


0

यह समस्या कॉल करने के लिए भूल के कारण हो सकता [super viewDidAppear:]भीतर viewDidAppearहै, लेकिन मुझे यकीन है कि यह अकेला कारण नहीं हूँ।


0

मेरी भी यही समस्या थी। यहाँ मेरी परियोजना के साथ समस्या है:
जब मैंने कस्टम बिल्डर पर कस्टम UITableViewCell बनाने के लिए काम किया, तो मैंने कस्टम टेबल सेल के रूप में Xcode में ऑब्जेक्ट संग्रह फलक से एक टेबल व्यू सेल के बजाय एक व्यू खींच लिया । यदि आप एक ही स्थिति में हैं, तो यहां समाधान है: इंटरफ़ेस बिल्डर में दृश्य हटाएं, सुनिश्चित करें कि आप ऑब्जेक्ट संग्रह फलक से एक टेबल व्यू सेल खींचें और कस्टम टेबल सेल दृश्य फिर से करें। आप ऑब्जेक्ट को पुराने दृश्य में कॉपी कर सकते हैं और नए टेबल व्यू सेल के लिए कैनवास पर पेस्ट कर सकते हैं।



0

मुझे टेबल पाद दृश्य के साथ एक बहुत ही समान समस्या थी जिसे मैं Xcode 6, iOS 7+ में सेट कर रहा था। समाधान निब फ़ाइल के प्रारूप में था। जाहिरा तौर पर यह Xcode 4 प्रारूप या कुछ और में फंस गया था। फ़ाइल सेटिंग्स को "में खोलता है: Xcode 6.0" (या डिफ़ॉल्ट, उस मामले के लिए), तुरंत इसे ठीक कर दिया। संयोग से समाधान मिला: यह मुझे पागल कर रहा था, इसलिए मैंने पूरी फाइल को हटा दिया और फिर से बनाया, जाहिर है डिफ़ॉल्ट सेटिंग्स के साथ। मुझे पता नहीं है कि केवल नवीनतम Xcode में फ़ाइल को संपादित करने ने इसे Xcode 5+ प्रारूप में परिवर्तित क्यों नहीं किया, क्योंकि यह आमतौर पर होता है।

च


0

मैं गया वही मुद्दा था। मैं अपने डिटेल व्यू कॉन्ट्रोलर के पास गया और पहचानकर्ता का नाम बदलकर यूआईवीयूवाई कर दिया। यह पहले UITableView पर था। इसने समस्या को ठीक कर दिया। यह समस्या आपके विवरण में नहीं है। यह किसी अन्य में हो सकता है। सम्मानित पहचानकर्ता का नाम बदलने का प्रयास करें।


0

आईबी में स्टैटिक टेबल व्यू सेल के साथ मेरा भी ऐसा ही मुद्दा था। एक सेल में एक सबव्यू था जिसमें एक वर्ग था जिसे गलती से यूआईएक्सएक्सफील्ड के एक उपवर्ग में बदल दिया गया था। संकलक ने कोई चेतावनी / त्रुटि नहीं दी। लेकिन रनटाइम में सिस्टम उपरोक्त परिणाम के साथ व्यू कंट्रोलर को लोड करने में असमर्थ था।



0

समाधान: कॉल सुपर लेआउट से पहले बाधाओं को बदलें

- (void)layoutSubviews
{

    [self _updateConstraints];

    [super layoutSubviews];
}

0

मैंने कार्ल लिंडबर्ग के जवाब को ओवरराइड UITableViewकरने के बजाय संशोधित किया और इसने मेरे लिए काम करना शुरू कर दिया:

UITableView + AutoLayoutFix.h

@interface UITableView (AutoLayoutFix)
@end

UITableView + AutoLayoutFix.m

#import <objc/runtime.h>

@implementation UITableView (AutoLayoutFix)

+ (void)load
{
    Method existingMethod = class_getInstanceMethod(self, @selector(layoutSubviews));
    Method newMethod = class_getInstanceMethod(self, @selector(_autolayout_replacementLayoutSubviews));

    method_exchangeImplementations(existingMethod, newMethod);
}

- (void)_autolayout_replacementLayoutSubviews
{
    [super layoutSubviews];
    [self _autolayout_replacementLayoutSubviews]; // not recursive due to method swizzling
    [super layoutSubviews];
}

@end

फिर MyViewController.mमैंने सिर्फ श्रेणी का आयात किया:

#import "UITableView+AutoLayoutFix.h"

0

मैं एक ही समस्या से मिला और आखिरकार कारण यह पाया कि मैंने UITableViewCell में एक बाधा जोड़ी, जो UITableViewCell की contentView होनी चाहिए । जब मैंने बाधा को बदल दिया तो सब कुछ ठीक हो गया!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.