UITableView के वर्गों के बीच की जगह को कम करना


141

क्या UITableView के दो खंडों के बीच की जगह कम करने का कोई तरीका है? मेरे पास मौजूद हर एक खंड के बीच लगभग 15 पिक्सेल हैं। मैं पहले से ही के लिए 0 वापसी करने की कोशिश की थी -tableView:heightForFooterInSection:और -tableView:heightForHeaderInSection:लेकिन वह कुछ भी नहीं बदलता है।

कोई सुझाव?


1
मैं एक समूहीकृत तालिका दृश्य का उपयोग कर रहा था और शीर्ष लेख / पाद लेख ऊंचाई सेट कर रहा था 0.0। लेकिन यह (डिफ़ॉल्ट) 30 पॉइंट ऊंचाई के साथ एक ग्रे क्षेत्र दिखा रहा था। का उपयोग करना 0.0अस्वीकार्य है। आप ऊपर किसी भी मूल्य का उपयोग करना चाहिए 0.0जैसे 0.0001
हनी

जैसा @ हनी कहते हैं, 0.0काम नहीं करता। मेरे पास इसी मुद्दे के लिए अधिक गहन उत्तर है: stackoverflow.com/a/22185534/2789144
जेम्स नेल्सन

जवाबों:


263

यह थोड़ा मुश्किल था, लेकिन इस कोड की कोशिश करें:

- (CGFloat)tableView:(UITableView*)tableView 
           heightForHeaderInSection:(NSInteger)section {
    if (section == 0) {
        return 6.0;
    }

    return 1.0;
}

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

- (UIView*)tableView:(UITableView*)tableView 
           viewForHeaderInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

तदनुसार मान बदलें। अंतरिक्ष को हटाने के लिए, मुझे लगता है कि 0.0 को स्वीकार नहीं किया जाएगा। सबसे छोटा सेंस मान 1.0 लगता है।


2
आपको 5.0 के बजाय 5.0f पर लौटना चाहिए, क्योंकि डबल-फ्लोट संघर्ष
लियोनस

45
आप ऊँचाई के रूप में 0.00001f भी वापस कर सकते हैं और आपको 0 पिक्सेल / अंक की ऊँचाई मिलेगी।
कालस

1
जैसा कि @Klass बताते हैं, आप 0ऊंचाई के रूप में उपयोग नहीं कर सकते - आपको डिफ़ॉल्ट ऊंचाई मिलेगी।
ज़ेकेल १४'१४

26
CGFLOAT_MIN का उपयोग क्यों नहीं किया जाता है? यह इस तरह के परिदृश्यों के लिए बना है :)
आंद्रेई फिलिप

12
यदि स्विफ्ट का उपयोग कर रहे हैं, तो आप वापस लौट सकते हैंCGFloat.leastNonzeroMagnitude
oztune

140

उन सभी के लिए जो 0 का उपयोग करने के लिए दूरी को कम करना चाहते हैं:

tableView.sectionHeaderHeight = 0.0;
tableView.sectionFooterHeight = 0.0;

क्योंकि UITableViewDelegate की सेवा केवल शून्य से अधिक फ्लोट्स से शुरू होने वाला प्रभाव बनाती है।

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    return 1.0;
}


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

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

(XCode 4.0.2 के साथ iOS 4.1 का उपयोग करते हुए)


7
वापसी 0.0001; मेरे लिए काम कर रहा है। मैं xcode 4.6 और iOS 6.1
Sam

मुझे केवल पहले दो तरीकों में CGFLOAT_MIN को वापस करने की आवश्यकता है और यह ठीक काम करता है।
जूलियस

० उपयोग के बजायreturn .leastNormalMagnitude
स्टेन

33

आप वास्तव में आकार टैब के तहत इंटरफ़ेस बिल्डर में पाद / हेडर / सेल हाइट्स सेट कर सकते हैं। डिफ़ॉल्ट रूप से शीर्षलेख / पाद लेख 10.0 पर सेट किया जाता है।


मुझे लगता है कि ऐसा व्यवहार iOS 5.0 या iOS 6.0 में जोड़ा गया था, लेकिन हां - अब समूहों के बीच दूरी तय करना बहुत आसान है।
वाल्स वोशिन

2
मुझे पता है कि यह पुराना है, लेकिन मैं टिप्पणी करना चाहता था कि XCode 5 और iOS 7 के रूप में, ऐसा लगता है कि यह कोड में किया जाना है। मैंने इसे इंटरफ़ेस बिल्डर में 0 पर सेट किया था और इसे अभी भी 1 पर सेट किया गया था, जब तक कि मैंने इसे कोड में सेट नहीं किया था 0.
अहमद

Xcode 6 और iOS 8 के साथ यह स्टोरीबोर्ड में सिर्फ कॉन्फिग के साथ काम करता है।
मुरैना सागर

वे डिफ़ॉल्ट रूप से xcode 7 पर 18 पर सेट हैं। लेकिन यह अब तक का सबसे आसान उपाय है!
स्थिर ०। Apr६

27

आपको अनुभाग शीर्ष लेख / पाद लेख ऊंचाई कम करनी होगी। तब वर्गों के बीच की जगह कम हो जाएगी।

इस कोड को आज़माएं

इससे मेरा काम बनता है :-)

tableView.sectionHeaderHeight = 2.0;
tableView.sectionFooterHeight = 2.0;

21

आप स्टोरीबोर्ड से अनुभाग पाद और हेडर की ऊंचाई भी कम कर सकते हैं। तालिका में -> आकार निरीक्षक। धारा ऊँचाई पर जाएँ।

स्टोरीबोर्ड में UITableView के लिए आकार निरीक्षक।

डिफ़ॉल्ट रूप से यह सादा शैली तालिका के लिए 22 और समूहित शैली तालिका के लिए 10 पर सेट है। आप हेडर और फुटर के मूल्यों को अलग-अलग बढ़ाकर / घटाकर मूल्यों को कॉन्फ़िगर कर सकते हैं।


6

मेरे लिए यह मुद्दा इसलिए था क्योंकि मैं एक समूहीकृत तालिका दृश्य शैली ( UITableViewStyleGrouped) का उपयोग कर रहा था । जब मैंने इसे एक सादे शैली में बदल दिया ( UITableViewStylePlain) मेरी tableView:heightForHeaderInSection:विधि केवल एक चीज थी जो प्रत्येक अनुभाग हेडर के आकार का निर्धारण करती थी।


4

शायद इसका उपयोग करें, 0 उम्मीद के मुताबिक काम नहीं करेगा

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
     return .leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

3

IOS7 के लिए अद्यतन: ARC ऑटोरेलिज अपडेट के कारण, यहाँ @ मॉर्टिन स्टोलज़ कोड संपादित किया गया।

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return 6;
    return 1.0;
}

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

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

(IOS7, Xcode v5.0 का उपयोग करके)


0

मेरे लिए बस यह कोड निम्नलिखित कोड का उपयोग करके हल हो गया,

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return section == 0 ? 1 : 20 // 20 is my other sections height
}

पहले खंड के लिए 1 लौटाने से समस्या हल हो गई है।


0

शीर्ष लेख / पाद लेख स्थान को बदलने के लिए निम्नलिखित विधियों को लागू करना होगा:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

तथा

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat

(पाद ऊंचाई को बदलने के लिए संबंधित विधियों का उपयोग करें)

निम्नलिखित कोड वर्गों के आसपास के स्थानों को पूरी तरह से हटा देता है:

public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}

public func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.