IOS7 में UITableViewCell सेपरेटर गायब


129

मेरे पास UITableViewआईओएस 7 में केवल कुछ अजीब मुद्दे हैं ।

UITableViewCellSeparatorपहली पंक्ति के ऊपर और अंतिम पंक्ति के नीचे गायब हो जाता है। कभी-कभी पंक्तियों या कुछ स्क्रॉलिंग क्रियाओं के चयन के बाद यह दिखाई देता है।

मेरे मामले में tableViewसे भरी हुई है Storyboardके साथ UITableViewStylePlainशैली। समस्या निश्चित रूप से नहीं है UITableViewCellSeparatorStyle, जिसे डिफ़ॉल्ट रूप से नहीं बदला गया है UITableViewCellSeparatorStyleSingleLine

जैसा कि मैंने Apple देव मंचों ( यहाँ और यहाँ ) पर पढ़ा है, अन्य लोगों को इस तरह की समस्या है और कुछ वर्कअराउंड पाए जाते हैं, उदाहरण के लिए:

Workaround: disable the default selection and recreate the behaviour in a method
trigged by a tapGestureRecognizer.

लेकिन मैं अभी भी ऐसे विभाजक अजीब व्यवहार का कारण खोज रहा हूं।

कोई विचार?

अपडेट: जैसा कि मैंने XCode 5.1 DP और iOS 7.1 बीटा में देखा, Apple ने इस समस्या को ठीक करने की कोशिश की। अब विभाजक को अंतिम पंक्ति के नीचे कभी-कभी आवश्यकतानुसार दिखाया जाता है, कुछ ताज़ा करने के बाद, लेकिन टेबलव्यू निर्माण के बाद नहीं।


19
कभी-कभी मुझे ऐसा लगता है कि iOS7 इतना अपरिपक्व है। यह और मेरे द्वारा यहां दिखाई देने वाली चीजों की लंबी सूची आईओएस 7 पिछले आईओएस की पूर्णता से कितनी दूर है।
Bms270

1
Apple द्वारा सेटिंग्स ऐप में एक ही समस्या है, इसलिए मेरा मानना ​​है कि यह एक iOS 7 मुद्दा है। मैंने इसे रिपोर्ट किया है, और अपने फॉलोअप में उन्होंने इस मुद्दे को दिखाने वाली छवियों के लिए कहा है।
जोहान

@Gatada सेटिंग ऐप में आप समस्या कहाँ देख रहे हैं?
जेमी फॉरेस्ट

2
एक ही मुद्दे का सामना किया और [सेल सेटसेपरेटर इनसेट: UIEdgeInsetsFromString (@ "1")] जोड़कर तय किया; के साथ (UITableViewCell *) tableView: (UITableView *) tableView सेलफोररॉवटइंडेक्सपैथ: (NSIndexPath *) इंडेक्सपैथ विधि
आयशा फातिमा

1
यह अभी भी iOS 8.0 बेटस में टूटा हुआ प्रतीत होता है। मैंने राडार खोला है 17724043 क्या किसी को इसकी देखभाल करनी चाहिए।
एंडी विल्किंसन

जवाबों:


77

मैंने प्रभावित कोशिकाओं के सबव्यू पदानुक्रम को डंप किया और पाया कि इसे _UITableViewCellSeparatorViewछिपाया गया था। कोई आश्चर्य नहीं कि यह नहीं दिखाया गया है!

मैंने layoutSubviewsअपने UITableViewCellउपवर्ग में ओवररोड किया और अब विभाजकों को मज़बूती से प्रदर्शित किया जाता है:

उद्देश्य-सी :

- (void)layoutSubviews {
    [super layoutSubviews];

    for (UIView *subview in self.contentView.superview.subviews) {
        if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
            subview.hidden = NO;
        }
    }
}

स्विफ्ट :

override func layoutSubviews() {
    super.layoutSubviews()

    guard let superview = contentView.superview else {
        return
    }
    for subview in superview.subviews {
        if String(subview.dynamicType).hasSuffix("SeparatorView") {
            subview.hidden = false
        }
    }
}

यहां प्रस्तावित अन्य समाधान मेरे लिए लगातार काम नहीं करते थे या क्लंकी (कस्टम 1 px पाद लेख दृश्य जोड़कर) प्रतीत होते थे।


मैंने आपकी विधि का उपयोग किया है लेकिन उपवर्ग में नहीं मैंने UITableViewCell में एक श्रेणी जोड़ी थी। इसने मेरी मदद की। धन्यवाद।
विटालि बोयर्सकी

बेशक यह एक श्रेणी में भी संभव है। चूंकि इसके लिए विधि स्विज़लिंग की आवश्यकता होती है, मैं सरल उपवर्ग दृष्टिकोण के लिए गया।
Ortwin Gentz

3
यह एकमात्र समाधान है जिसने मेरे लिए काम किया। मेरी समस्या पॉप अप UITableView स्क्रॉल करने योग्य होने के लिए पर्याप्त पंक्तियाँ थीं। हालांकि "hasSuffix:" भाग काफी नाजुक है।
जुहान_

मेरे लिये कार्य करता है। शायद सवाल मूर्खतापूर्ण है, लेकिन क्या यह निजी एपीआई का उपयोग नहीं है?
फॉरेस्टर

1
IOS9 में मेरे लिए काम करता है
tounaobun

42

यह मेरे लिए काम किया:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // fix for separators bug in iOS 7
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

आप अधिक वोटों के लायक हैं, यह वही है जिसकी मुझे ज़रूरत थी, मैंने इसे एक श्रेणी में जोड़ा, इसलिए अब मैं [tableView reloadData] करने के बाद, यदि यह बग होता है (मेरे मामले में पाद लेख विभाजक जो फिर से प्रकट हुआ था), मैं कॉल करता हूं [tableView reloadSeparators];
दिसंबर को नीनोस्क्रिप्ट

12

मुझे लापता विभाजक के साथ भी समस्या थी और मुझे पता चला कि दशमलव संख्याheightForRowAtIndexPath को वापस करते समय समस्या केवल उत्पन्न हुई थी । उपाय:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return ceil(yourHeight) // Ceiling this value fixes disappearing separators
}

1
अगर मैं ऊंचाई को लागू नहीं करता हूं तो मामले के बारे में क्या बताऊँ?
बीएस

दिलचस्प। हालाँकि, यह मेरी परियोजना में भी होता है - और ऊँचाईफोररॉआटइंडेक्सपैथ को लागू नहीं किया जाता है। आईबी पंक्ति / सेल में ऊंचाई 100 है।
जोहान

6
इसने मेरे लिए समस्या का समाधान नहीं किया और मेरे पास ऊँचाई हैForRowAtIndexPath विधि।
ग्रिगली कोवाक्स

समस्या को कम से कम आंशिक रूप से हल करता है। सेल गैर-पूर्णांक ऊंचाइयों के बारे में भ्रमित होने लगता है।
निक फ्रेलोव

आपको पिक्सेल की संख्या को सीवन करना होगा और फिर अंक प्राप्त करने के लिए स्क्रीन स्केल फैक्टर द्वारा विभाजित करना होगा जो दशमलव में होना ठीक है। यदि आप ऐसा नहीं करते हैं, तो यह रेटिना के अनुकूल नहीं होगा।
trss

11

क्या आपने हेडर और टेबल के पाद को हल्के भूरे रंग के बैकग्राउंड रंग के साथ ऊंचाई 1 में जोड़ने की कोशिश की थी? मूल रूप से यह पहले और अंतिम विभाजकों का मजाक उड़ाएगा।


यह अच्छा लगता है, लेकिन आप वास्तव में ऐसा कैसे करते हैं? viewforfooter का उपयोग करें?
skinsfan00atg

1
यह उतना आसान नहीं है जितना लगता है, किसी कारण से मुझे भी ऊँचाई पर लागू करना पड़ा अन्यथा initwithframe में निर्दिष्ट ऊँचाई को अनदेखा कर दिया जाता था। मैं यह भी नोटिस करता हूं कि लाइटग्रैयलर एक ही रंग का नहीं है, इसलिए यह वास्तव में काम नहीं करेगा। एक कस्टम ग्रे बनाने के लिए हो सकता है
skinsfan00atg

यह बहुत ही
जानदार

हाँ मैं पूरी तरह सहमत हूँ। आईओएस 7 की रिलीज के बाद मुझे जो एकमात्र काम मिला, वह अब कोई बेहतर तरीका है?
airpaulg

2
रंग से मेल खाने के लिए, टेबल व्यू का उपयोग करें। सेपरेटर
जेफ

8

@samvermette

मैंने इस प्रतिनिधि विधियों का उपयोग करके समस्या को ठीक किया। अब यह टिमटिमाता नहीं है:

-(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // fix for separators bug in iOS 7
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
}


-(void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // fix for separators bug in iOS 7
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
}

7

हमने अपने ऐप में इस समस्या का सामना किया। जब उपयोगकर्ता ने एक सेल का चयन किया, तो एक नया टेबल व्यू नेविगेशन नियंत्रक स्टैक पर धकेल दिया गया और फिर जब उपयोगकर्ता ने इसे बंद कर दिया, तो विभाजक गायब था। हमने इसे टेबल व्यू डेलिगेट विधि [self.tableView deselectRowAtIndexPath:indexPath animated:NO];में डालकर हल किया didSelectRowAtIndexPath


क्या आपने कोशिश की है self.tableView.allowsMultipleSelection = NO;?
5

6

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

बस जोड़ दो:

[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
[self.tableView deselectRowAtIndexPath:indexPath animated:NO];

1
इस समाधान ने इसे मेरे लिए तय किया; हालाँकि, मैंने इसे उलट दिया - चयन को बनाए रखने के लिए। इसलिए, पहले चयन रद्द करें, फिर से चयन करें।
जोहान

2
मुझे नहीं पता कि जब आप "डेटा फिर से लोड होने के बाद" कहते हैं, तो ओवरराइड करें
airpaulg

6

मैंने पाया है कि सबसे आसान उपाय है, सेल को फिर से लोड करने के बाद, ऊपर की सेल को फिर से लोड करना:

if (indexPath.row > 0) {
    NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row - 1 inSection:indexPath.section];
    [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationNone];
}

1
मेरे लिए काम किया। धन्यवाद। किसी भी अन्य तरीकों ने मेरी मदद नहीं की (समवेत के उत्तर से विभाजक शैली परिवर्तन शामिल करें)।
सर्फर राइडर

4

एक सरल और साफ समाधान जो iOS 8 और iOS 9 (बीटा 1) दोनों पर काम करता है

यहाँ एक सरल, स्वच्छ और गैर-दखल देने वाला समाधान है। इसमें एक श्रेणी पद्धति को कॉल करना शामिल है जो विभाजकों को ठीक करेगा।

आपको बस सेल के पदानुक्रम के नीचे चलने और विभाजक को छिपाने की आवश्यकता है। ऐशे ही:

for (UIView *subview in cell.contentView.superview.subviews) {
    if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
        subview.hidden = NO;
    }
}

मैं इसे इस तरह से UITableViewCell पर एक श्रेणी में जोड़ने की सलाह देता हूं:

@interface UITableViewCell (fixSeparator)
- (void)fixSeparator;
@end

@implementation UITableViewCell (fixSeparator)

- (void)fixSeparator {
    for (UIView *subview in self.contentView.superview.subviews) {
        if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
            subview.hidden = NO;
        }
    }
}

@end

क्योंकि विभाजक वर्तमान में चयनित की तुलना में अलग-अलग सेल में गायब हो सकता है, इसलिए टेबल व्यू के सभी सेल पर इस फिक्स को कॉल करना शायद एक अच्छा विचार है । उसके लिए, आप एक श्रेणी UITableView में जोड़ सकते हैं जो इस प्रकार है:

@implementation UITableView (fixSeparators)

- (void)fixSeparators {
    for (UITableViewCell *cell in self.visibleCells) {
        [cell fixSeparator];
    }
}

@end

इसके स्थान पर, आप -fixSeparatosअपने टेबल पर कॉल कर सकते हैं ठीक उसी समय कार्रवाई के बाद जो उन्हें गायब कर देता है। मेरे मामले में, यह कॉल करने के बाद [tableView beginUpdates]और था [tableView endUpdates]

जैसा कि मैंने शुरुआत में कहा था, मैंने इसे iOS 8 और iOS 9 दोनों पर टेस्ट किया है। मुझे लगता है कि यह iOS 7 पर भी काम करेगा, लेकिन मेरे पास इसे आजमाने का कोई तरीका नहीं है। जैसा कि आप शायद जानते हैं, यह सेल के इंटर्नल के साथ फिडेल करता है ताकि भविष्य के कुछ रिलीज में काम करना बंद कर सके। और Apple सैद्धांतिक रूप से (0.001% संभावना) इस वजह से आपके ऐप को अस्वीकार कर सकता है, लेकिन मैं यह नहीं देख सकता कि वे कैसे पता लगा सकते हैं कि आप वहाँ क्या कर रहे हैं (वर्ग के प्रत्यय की जाँच करके स्थैतिक विश्लेषक द्वारा कुछ पता नहीं लगाया जा सकता है) बुरा, IMO)।


हाँ। स्विफ्ट के नवीनतम संस्करण में परिवर्तित होने के बाद, इसने मेरे लिए काम किया। ++ कॉल करने के लिए fixSeparators हर कॉल के बाद tableView.endUpdates ()।
ObjectiveTC

1
मुझे खुशी है कि यह आपके लिए उपयोगी था! मुझे वास्तव में विश्वास है कि यह सबसे अच्छा समाधान है, इसलिए उम्मीद है कि अधिक लोग इसे खोज लेंगे।
लुकास पेट्र

4

@ Ortwin-gentz की टिप्पणी के आधार पर, यह समाधान मेरे लिए iOS 9 में काम करता है।

func fixCellsSeparator() {

    // Loop through every cell in the tableview
    for cell: UITableViewCell in self.tableView.visibleCells {

        // Loop through every subview in the cell which its class is kind of SeparatorView
        for subview: UIView in (cell.contentView.superview?.subviews)!
            where NSStringFromClass(subview.classForCoder).hasSuffix("SeparatorView") {
                subview.hidden = false
        }
    }

}

(स्विफ्ट कोड)

मैं का उपयोग fixCellsSeparator () बुला के बाद समारोह endUpdates () मेरी tableView के कुछ तरीकों में, उदाहरण के लिए:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    //  Perform some stuff
    //  ...

    self.tableView.endUpdates()
    self.fixCellsSeparator()

}

मुझे उम्मीद है कि यह समाधान किसी के लिए उपयोगी होगा!


2

Airpaulg के जवाब के लिए पूरक।

तो मूल रूप से एक को दो UITableDelegate विधियों को लागू करना होगा। यहां मेरा समाधान है जो iOS7 और iOS6 दोनों पर काम करता है।

#define IS_OS_VERSION_7 (NSFoundationVersionNumber_iOS_6_1 < floor(NSFoundationVersionNumber))

#define UIColorFromRGB(hexRGBValue) [UIColor colorWithRed:((float)((hexRGBValue & 0xFF0000) >> 16))/255.0 green:((float)((hexRGBValue & 0xFF00) >> 8))/255.0 blue:((float)(hexRGBValue & 0xFF))/255.0 alpha:1.0]

// यह खाली टेबल ग्रिड को कोशिकाओं के नीचे छिपा देगा यदि वे पूरी स्क्रीन को कवर नहीं करते हैं

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *view = nil;

    if (IS_OS_VERSION_7 /* && <is this the last section of the data source> */)
    {
        CGFloat height = 1 / [UIScreen mainScreen].scale;
        view = [[UIView alloc] initWithFrame:CGRectMake(0., 0., 320., height)];
        view.backgroundColor = UIColorFromRGB(0xC8C7CC);
        view.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    }
    else
    {
        view = [UIView new];
    }
    return view;
}


- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if (IS_OS_VERSION_7 /* && <is this the last section of the data source> */)
    {
        return 1 / [UIScreen mainScreen].scale;
    }
    else
    {
        // This will hide the empty table grid below the cells if they do not cover the entire screen
        return 0.01f;
    }
}

2

यह मेरे लिए मुद्दा तय:

सुनिश्चित करें कि clipsToBoundsसेल के लिए YES पर सेट है, लेकिन सेल के लिए NO contentView। भी सेट करेंcell.contentView.backgroundColor = [UIColor clearColor];


सेल और सामग्री दृश्य दोनों के लिए स्टोरीबोर्ड में गलत पर क्लिपसुब्यू सेट करना समस्या को निर्धारित करता है! वोटों की जरूरत ज्यादा!
ब्रेट

कोशिकाओं पर YES के लिए ClipToBounds सेट करना मेरे लिए काफी था।
रेने ज्यूस

2

ऐसा लगता है कि यह मुद्दा कई परिस्थितियों में प्रकट होता है।

मेरे लिए यह सेल चयन के साथ कुछ करना था। मुझे पता नहीं क्यों और इसे बहुत गहरी खुदाई करने का समय नहीं मिला, लेकिन मैं कह सकता हूं कि यह तब होने लगा जब मैंने सेल selectionStyleको किसी के पास सेट नहीं किया। अर्थात:

//This line brought up the issue for me
cell.selectionStyle = UITableViewCellSelectionStyleNone;

मैंने ऊपर दिए गए कुछ प्रतिनिधि तरीकों का उपयोग करने की कोशिश की और अपनी separatorStyle संपत्ति को बंद कर दिया , tableViewलेकिन उन्होंने मेरे मुद्दे को ठीक करने के लिए कुछ भी नहीं किया।

पूरे कारण कि मुझे इसकी आवश्यकता थी क्योंकि मुझे सेल चयन की आवश्यकता नहीं थी।

इसलिए, मुझे कुछ ऐसा मिला जिसने मेरे लिए काम किया। मैंने सिर्फ इस पर चयन अक्षम किया UITableView:

tableView.allowsSelection = NO;

आशा है कि यह किसी की मदद करता है, अगर आपको सेल चयन की आवश्यकता नहीं है।


2

मैंने ठीक करने के लिए बहुत सारे सुझाव देने की कोशिश की, लेकिन वह ठीक नहीं कर सका। आमतौर पर मैंने नीचे के रूप में कस्टम विभाजक रेखा तय की:

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    var lineView = UIView(frame: CGRectMake(20, cell.contentView.frame.size.height - 1.0, cell.contentView.frame.size.width - 20, 1))

    lineView.backgroundColor = UIColor(red: 170.0/255.0, green: 170.0/255.0, blue: 170.0/255.0, alpha: 1)
    cell.contentView.addSubview(lineView)
}

पी / एस: पर कस्टम willDisplayCell नहीं cellForRowAtIndexPath


1

आश्चर्यजनक रूप से, सेल के separatorInsetमूल्य को आगे और पीछे बदलना काम कर रहा है:

NSIndexPath *selectedPath = [self.controller.tableView indexPathForSelectedRow];
[self.controller.tableView deselectRowAtIndexPath:selectedPath animated:YES];

UITableViewCell *cell = [self.controller.tableView cellForRowAtIndexPath:selectedPath];
UIEdgeInsets insets = cell.separatorInset;
cell.separatorInset = UIEdgeInsetsMake(0.0, insets.left + 1.0, 0.0, 0.0);
cell.separatorInset = insets;

1

मुझे अपने यूआईटेबल व्यू के निचले भाग में इस असंगत विभाजक लाइन डिस्प्ले की समस्या भी थी। कस्टम पाद दृश्य का उपयोग करते हुए, मैं एक समान रेखा बनाने और संभावित मौजूदा एक के शीर्ष पर प्रदर्शित करने में सक्षम रहा हूं (जो कि कभी-कभी गायब था)।

इस समाधान की एकमात्र समस्या यह है कि Apple एक दिन लाइन की मोटाई बदल सकता है

- (UIView*) tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    float w = tableView.frame.size.width;

    UIView * footerView =  [[UIView alloc] initWithFrame:CGRectMake(0, 0, w, 1)];
    footerView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    footerView.clipsToBounds=NO;

    UIView* separatoraddon = [[UIView alloc] initWithFrame:CGRectMake(0, -.5, w, .5)];
    separatoraddon.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    separatoraddon.backgroundColor = tableView.separatorColor;
    [footerView addSubview:separatoraddon];

    return footerView;
}
- (CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 1;
}

1

मैंने कोड की इन पंक्तियों को रखने का संकल्प लिया है जहाँ टेबलव्यू हैपन्स का अद्यतन:

self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None;
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine;

उदाहरण के लिए, मेरे मामले में मैंने उन्हें यहाँ रखा है:

tableView.beginUpdates()
tableView.insertRowsAtIndexPaths(insertIndexPaths, withRowAnimation: UITableViewRowAnimation.Fade)
tableView.endUpdates()
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None;
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine;

1

सेल अपडेट करने से पहले आपको सेल चयन को हटाने की आवश्यकता है। तब आप चयन बहाल कर सकते थे।

NSIndexPath *selectedPath = [self.tableview indexPathForSelectedRow];
    [self.tableview deselectRowAtIndexPath:selectedPath animated:NO];
    [self.tableview reloadRowsAtIndexPaths:@[ path ] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableview selectRowAtIndexPath:selectedPath animated:NO scrollPosition:UITableViewScrollPositionNone];

1

उपरोक्त समस्या को ठीक करने के लिए, दृश्यदर्शी में खाली पाद लेख जोड़ें।

UIView *emptyView_ = [[UIView alloc] initWithFrame:CGRectZero];   
emptyView_.backgroundColor = [UIColor clearColor];  
[tableView setTableFooterView:emptyView_];

कृपया ViewForFooterInSection प्रतिनिधि पद्धति में उपरोक्त पंक्तियों का उपयोग न करें। इसका मतलब यह नहीं है कि दृश्य को लागू करेंफुटनरइन्फेक्शन विधि।


0

Airpaulg जवाब पर विस्तार करने के लिए, क्योंकि यह पूरी तरह से मेरे लिए काम नहीं किया ..

मैं भी ऊंचाई पाने के लिए heightforfooter विधि को लागू करने के लिए किया था

तब मैंने देखा कि lightgraycolor बहुत गहरा है। मैंने टेबलव्यू के वर्तमान विभाजक रंग को पकड़कर और इसका उपयोग करके इसे ठीक किया:

UIColor *separatorGray = [self.briefcaseTableView separatorColor]; [footerSeparator setBackgroundColor:separatorGray];


0

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


0

मेरे लिए क्या फर्क पड़ता है उस पंक्ति को पुनः लोड कर रहा था जिसके लिए नीचे विभाजक रेखा दिखाई नहीं देगी:

NSIndexPath *indexPath = 
     [NSIndexPath indexPathForRow:rowIndex inSection:sectionIndex];  
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];

0

मैं इस समस्या को दूसरे तरीके से हल करता हूं: एक परत जोड़ें जो इसकी ऊंचाई 0.5px है और इसका रंग lightgray में tableview.tableFooterView के रूप में है।

कोड इस तरह है:

UIView *tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 70)];
CALayer *topSeperatorLine = [CALayer layer];
topSeperatorLine.borderWidth = 0.5f;
topSeperatorLine.borderColor = [UIColor lightGrayColor].CGColor;
topSeperatorLine.frame = CGRectMake(0, 0, 320, 0.5f);
[tableFooterView.layer addSublayer:topSeperatorLine];
self.tableView.tableFooterView = tableFooterView;

0

अपने UITableViewCell उपवर्ग में लेआउट लागू करें और साक्षात्कार जोड़ें:

- (void)layoutSubviews{
    [super layoutSubviews]
    for (UIView *subview in self.contentView.superview.subviews) {
        if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
            CGRect separatorFrame = subview.frame;
            separatorFrame.size.width = self.frame.size.width;
            subview.frame = separatorFrame;
        }
    }
}

0

जैसा कि किसी और ने उल्लेख किया है, यह समस्या विभिन्न तरीकों से प्रकट होती है। मैंने निम्न समस्या के माध्यम से अपनी समस्या हल की:

[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[tableView endUpdates];

0

इस तरह के टिप्पणियों के साथ आए जवाबों और समाधानों के माध्यम से जाना:

यह दोनों iOS 7 और 8 में समस्याग्रस्त प्रतीत होता है। मैंने कोड को viewDidLoadविधि से सेल का चयन करते समय समस्या पर ध्यान दिया :

1) वर्कअराउंड ऐसा कर रहा था viewDidAppear:यदि कोई व्यक्ति दृश्य को प्रस्तुत करने और सेल का चयन करने के बीच ध्यान देने योग्य देरी को ध्यान में नहीं रखता है

2) दूसरा समाधान मेरे लिए काम करता है लेकिन कोड थोड़ा नाजुक दिखता है क्योंकि यह आंतरिक कार्यान्वयन पर आधारित हैUITableViewCell

3) खुद के विभाजक को जोड़ने के लिए सबसे अधिक लचीला और सबसे अच्छा लगता है, लेकिन अधिक कोडिंग की आवश्यकता है :)


0

viewWillAppearमेरे लिए काम में स्टाइल सेट करना ।


0

जैसा कि यह अभी भी IOS 8 के साथ एक मुद्दा है, मैं स्विफ्ट में अपना समाधान जोड़ूंगा। टेबलव्यू सेपरेटर लाइन को कोई नहीं पर सेट करें। फिर इस कोड को cellForRowAtIndexPath प्रतिनिधि विधि में जोड़ें। यह एक अच्छा विभाजक जोड़ देगा। यदि कथन यह तय करने की अनुमति देता है कि कौन सी कोशिकाओं में विभाजक होना चाहिए।

    var separator:UIView!
    if let s = cell.viewWithTag(1000)
    {
        separator = s
    }
    else
    {
        separator = UIView()
        separator.tag = 1000
        separator.setTranslatesAutoresizingMaskIntoConstraints(false)
        cell.addSubview(separator)

        // Swiper constraints
        var leadingConstraint = NSLayoutConstraint(item: separator, attribute: .Leading, relatedBy: .Equal, toItem: cell, attribute: .Leading, multiplier: 1, constant: 15)
        var heightConstraint = NSLayoutConstraint(item: separator, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 0.5)
        var bottomConstraint = NSLayoutConstraint(item: cell, attribute: .Bottom, relatedBy: .Equal, toItem: separator, attribute: .Bottom, multiplier: 1, constant:0)
        var trailingConstraint = NSLayoutConstraint(item: cell, attribute: .Trailing, relatedBy: .Equal, toItem: separator, attribute: .Trailing, multiplier: 1, constant: 15)
        cell.addConstraints([bottomConstraint, leadingConstraint, heightConstraint, trailingConstraint])
    }

    if indexPath.row == 3
    {
        separator.backgroundColor = UIColor.clearColor()
    }
    else
    {
        separator.backgroundColor = UIColor.blackColor()
    }

0

यहाँ इस समस्या का समाधान है। अपना सेल डालने के बाद, सेक्शन पुनः लोड करें। यदि पूरे खंड को फिर से लोड करना आपके लिए बहुत अधिक गहन है, तो बस ऊपर और नीचे के सूचकांक को फिर से लोड करें।

[CATransaction begin];
[CATransaction setCompletionBlock:^{
    //  Fix for issue where seperators disappear

    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
}];

[self.tableView insertRowsAtIndexPaths:@[ indexPath ] withRowAnimation:UITableViewRowAnimationFade];

[CATransaction commit];

0

इसी तरह की समस्या में भाग गया, मैंने पाया कि एक और अच्छा समाधान, खासकर यदि आपका डेटा स्रोत बड़ा नहीं है, तो जब आप -(void)scrollViewDidScroll:(UIScrollView *)scrollViewविधि को लागू करते हैं , तो टेबलडेटा को पुनः लोड करें , यहां एक उदाहरण है:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
      if (scrollView == self.tableView1) {
          [self.tableView1 reloadData];
      }

      else {
          [self.tableView2 reloadData];
      }
}

आप केवल दृश्यमान डेटा स्रोत के आधार पर गैर-दृश्यमान डेटा को पुनः लोड कर सकते हैं, लेकिन इसके लिए कुछ और हैकिंग की आवश्यकता होती है।

ध्यान रखें कि यह प्रतिनिधि फ़ंक्शन UITableViewDelegateप्रोटोकॉल के अंतर्गत आता है!

आशा करता हूँ की ये काम करेगा!

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