समूहीकृत UITableView हेडर की ऊंचाई कैसे बदलें?


88

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

अभी मेरे पास यह कोड है:

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

यहाँ छवि विवरण दर्ज करें


1
stackoverflow.com/questions/5441938/… इस लिंक को देखें ...
जितेंद्र

@ जितेन्द्रदेउर ने मुझे सही दिशा में मार्गदर्शन करने के लिए धन्यवाद दिया
सर्किटलेगो

जवाबों:


219

CGFLOAT_MINअपनी इच्छित अनुभाग ऊंचाई के लिए 0 के बजाय वापस लौटें ।

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

स्विफ्ट 3:

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

स्विफ्ट:

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 0 {
        return CGFloat.min
    }
    return tableView.sectionHeaderHeight
}

Obj सी:

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

8
स्विफ्ट में, 'CGFLOAT_MIN' अनुपलब्ध है: इसके बजाय CGFloat.min का उपयोग करें।
त्यूनाबुन

4
CGFloat.min दुर्घटना का कारण बना, क्योंकि CGFloat.min नकारात्मक मान लौटाता है जैसे -0.0000000000001
Pavel

2
शायद यह पैदल सेना है, लेकिन CGFloat.min बहुत छोटी संख्या नहीं है, यह एक बहुत बड़ी नकारात्मक संख्या है। यदि आप एक बहुत छोटी संख्या चाहते हैं तो आप एप्सिलॉन का उपयोग करेंगे।
एलेक्स बर्ड

6
स्विफ्ट 3 में यह हैCGFloat.leastNormalMagnitude
ixany

1
सलाह: इस मूल्य का उपयोग न करें estimatedHeightForHeaderInSection, ऐप क्रैश हो जाएगा।
पेड्रो पाउलो एमोरिम

27

यदि आप tableViewशैली समूहीकृत का उपयोग करते हैं , तो tableViewस्वचालित रूप से शीर्ष और निचले इनसेट सेट करें। उनसे बचने और आंतरिक इनसेट सेटिंग से बचने के लिए, हेडर और फूटर के लिए प्रतिनिधि विधियों का उपयोग करें। कभी 0.0 नहीं लौटाएंगेCGFLOAT_MIN

उद्देश्य सी

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

तीव्र

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}

मैं अतिरिक्त पड़ा शून्य वापसी के लिए viewForHeaderInSectionपूरी तरह से गायब हो जाने की हेडर के लिए।
डोमिनिक सीमायर

19

ऐसा प्रतीत होता है कि मैं 0. की ऊंचाई के साथ टेबल हैडर दृश्य सेट नहीं कर सकता। मैंने निम्नलिखित कार्य किया:

- (void)viewWillAppear:(BOOL)animated{
    CGRect frame = self.tableView.tableHeaderView.frame;
    frame.size.height = 1;
    UIView *headerView = [[UIView alloc] initWithFrame:frame];
    [self.tableView setTableHeaderView:headerView];
}

यहाँ पर ऊंचाई निर्धारित करना बेहतर होगा:- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 1.0f; }
अनिरुद्ध

19

इसने स्विफ्ट 4 के साथ मेरे लिए काम किया । अपने UITableViewउदाहरण को संशोधित करें viewDidLoad:

// Remove space between sections.
tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0

// Remove space at top and bottom of tableView.
tableView.tableHeaderView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))
tableView.tableFooterView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))

1
लाइफसेवर, इसे यहाँ उल्लेख करने के लिए समय निकालने के लिए धन्यवाद :)
user2672052

13

आप यह कोशिश कर सकते हैं:

में loadView

_tableView.sectionHeaderHeight = 0;

फिर

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

इसे तब तक हटाया जाना चाहिए जब तक कि आपके पास हेडर में कोई ऑब्जेक्ट न हो ...

और यदि आप सेक्शनहाइडर का कुछ आकार चाहते हैं, तो केवल रिटर्न वैल्यू बदलें।

वही अगर आपको सेक्शनफुटर नहीं हटाया जाता है।

_tableView.sectionFooterHeight = 0;

तथा

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

खैर, यह iOS7 में टेबलव्यू के साथ मेरी समस्याओं के लिए काम करता है।


3

self.tableView.tableHeaderView = [UIView new];आपको जोड़ने के बाद कोड को हटा देना चाहिए

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

यह footerऊंचाई है जो मेरे मामले में समस्या पैदा कर रही है। मदद के लिए शुक्रिया।
pkc456

2

आप viewForHeaderInSectionकिसी भी ऊंचाई के साथ एक दृश्य का उपयोग और वापस कर सकते हैं ।

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{

    int height = 30 //you can change the height 
    if(section==0)
    {
       UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, height)];

       return view;
    }
}

मैं अनुभाग हेडर के बारे में नहीं पूछ रहा हूं, लेकिन टेबल हेडर।
सर्किटलेगो

तब आप सीधे टेबल हेडर दृश्य में एक uiview पास कर सकते हैं।
दिव्य शुक्ला


2

स्विफ्ट 4 में

समूहीकृत तालिका दृश्य में अतिरिक्त शीर्ष गद्दी निकालें।

यहाँ ऊंचाई को हेडर के लिए न्यूनतम ऊंचाई के रूप में 1 दिया गया है क्योंकि आप 0 नहीं दे सकते हैं क्योंकि टेबलव्यू इसे डिफ़ॉल्ट टॉप मार्जिन लेगा यदि शून्य ऊंचाई दी गई है।

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

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

0

देखने का उदाहरण

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 118)];
view.backgroundColor = COLOR_DEFAULT;

NSString* key = [self.tableKeys objectAtIndex:section];
NSArray *result = (NSArray*)[self.filteredTableData objectForKey:key];
SZTicketsResult *ticketResult = [result objectAtIndex:0];

UIView *smallColoredView = [[UIView alloc] initWithFrame:CGRectMake(0, 5, 320, 3)];
smallColoredView.backgroundColor = COLOR_DEFAULT_KOSTKY;
[view addSubview:smallColoredView];

UIView *topBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 8, 320, 40)];
topBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:topBackgroundView];

UILabel *totalWinnings = [[UILabel alloc] initWithFrame:CGRectMake(10, 8, 300, 40)];
totalWinnings.text = ticketResult.message;
totalWinnings.minimumFontSize = 10.0f;
totalWinnings.numberOfLines = 0;
totalWinnings.backgroundColor = [UIColor clearColor];
totalWinnings.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:totalWinnings];

UIView *bottomBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 55, 320, 58)];
bottomBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:bottomBackgroundView];

UILabel *numberOfDraw = [[UILabel alloc] initWithFrame:CGRectMake(10, 55, 290, 58)];
numberOfDraw.text = [NSString stringWithFormat:@"sometext %@",[ticketResult.title lowercaseString]];;
numberOfDraw.minimumFontSize = 10.0f;
numberOfDraw.numberOfLines = 0;
numberOfDraw.backgroundColor = [UIColor clearColor];
numberOfDraw.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:numberOfDraw];

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