ios - UITableView में विभाजक की पूरी चौड़ाई कैसे सेट करें




objective-c iphone (10)

  1. आप UITableViewCell चयन करें
  2. इंस्पेक्टर इंस्पेक्टर के पास जाओ
  3. विभाजक पर जाएं और इसे "कस्टम इनसेट" में बदलें
  4. left और / या right फ़ील्ड सेट करें। (डिफ़ॉल्ट रूप से left: 15 , right: 0 )

देखो कि यह मेरे लिए कैसे काम करता है ( left: 100 का उपयोग करके left: 100 ):

नतीजा:

इसलिए मेरे पास एक UITableView है जहां विभाजकों की पूरी चौड़ाई नहीं है। यह बाईं ओर से पहले 10 पिक्सेल की तरह समाप्त होता है। मैं दृश्य कोड में इस कोड के साथ खेल रहा था

self.tableView.layoutMargins = UIEdgeInsetsZero;

स्टोरीबोर्ड में भी जब आप कस्टम या डिफ़ॉल्ट चयनकर्ताओं का चयन कर सकते हैं। अब जितनी भी कोशिकाएँ आबाद हैं, उनमें पूरी चौड़ाई के चयनकर्ता नहीं हैं, लेकिन जो कोशिकाएँ खाली हैं उनकी पूरी चौड़ाई है।

पृथ्वी पर मैं इसे कैसे ठीक कर सकता हूं?

पूरी सहायताके लिए शुक्रिया


IOS 9.3 और स्विफ्ट 2.2 के लिए परीक्षण किया गया। willDisplayCell में कोड डालना सुनिश्चित करें जो सेल को प्रदर्शित करने से ठीक पहले कहा जाता है और willDisplayCell में नहीं। willDisplayCell जहां आप केवल सेल बनाते हैं।

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    cell.separatorInset = UIEdgeInsetsZero
    cell.layoutMargins = UIEdgeInsetsZero
}

UITableViewController के लिए फ़ंक्शन में override जोड़ें, जैसे: override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {


ViewDidLoad (iOS11 का परीक्षण किया गया - तेजी से 4.1)

प्रयत्न, कोशिश

tableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0)


iOS 9+ में तेजी के लिए

यदि कोई कस्टम UITableViewCell का उपयोग कर रहा है:

override var layoutMargins: UIEdgeInsets {
    get { return UIEdgeInsetsZero }
    set(newVal) {}
}

उसके बाद अपने tableView में viewDidLoad :

    self.tableView?.separatorInset = UIEdgeInsetsZero;
    self.tableView?.layoutMargins = UIEdgeInsetsZero;

इनमें से कोई भी समाधान iPad पर काम नहीं करता है, लेकिन मैं एक ऐसा समाधान लेकर आया हूं, जिसमें दोनों उपकरणों को शामिल किया गया है:

पुन: प्रयोज्य कोशिकाओं के साथ:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    ...[other code]...
    [cell setLayoutMargins:UIEdgeInsetsZero];
    [cell setSeparatorInset:UIEdgeInsetsZero];
    return cell;
}

गैर पुन: प्रयोज्य कोशिकाओं के साथ:

- (void)removeSeparatorInset:(UITableView*)tableView{
    NSArray *cells = [tableView visibleCells];
    for (UITableViewCell *cell in cells){
        [cell setLayoutMargins:UIEdgeInsetsZero];
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }
}

-(void) viewDidLayoutSubviews{
   [super viewDidLayoutSubviews];
   [self removeSeparatorInset:self.tableView];
}

बस इस दृष्टिकोण पर विस्तार करने के लिए:

@property(nonatomic) UIEdgeInsets separatorInset;
@property(nonatomic) UIEdgeInsets layoutMargins;

दोनों गुणों का उपयोग UITableView & UITableViewCell द्वारा किया जा सकता है। उत्तरार्द्ध वास्तव में, UIView संपत्ति है, जो कि UITableView & UITableViewCell दोनों का एक मूल वर्ग है।


इसने मेरे लिए iOS 8.4 - 9.0 डिवाइस पर Xcode 6.4 और Swift 1.2 का उपयोग कर काम किया:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = UITableViewCell()


    cell.preservesSuperviewLayoutMargins = false
    cell.separatorInset = UIEdgeInsetsZero
    cell.layoutMargins = UIEdgeInsetsZero

    return cell
}

स्विफ्ट 3.0 अपडेट

cell.preservesSuperviewLayoutMargins = false
cell.separatorInset = UIEdgeInsets.zero
cell.layoutMargins = UIEdgeInsets.zero

ठीक है मुझे जवाब मिल गया। पता नहीं क्यों मैं इस पोस्ट से पहले नहीं आया था, लेकिन इससे पहले कि आप एक सवाल पोस्ट करने के बाद अचानक सही पोस्ट सिर्फ आपके आगे दिखाई देता है। मुझे इस पोस्ट से जवाब मिला: iOS 8 UITableView सेपरेटर इनसेट 0 काम नहीं कर रहा है

बस अपने TableViewController पर इस कोड को जोड़ें

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }

    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [self.tableView setSeparatorInset:UIEdgeInsetsZero];
    }

    if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
        [self.tableView setLayoutMargins:UIEdgeInsetsZero];
    }
}

मुझे UITableViewController से विरासत में मिली और willDisplayCell में दो willDisplayCell सेटिंग्स के लिए अतिरिक्त की जरूरत है। स्विफ्ट में ऐसा दिखता है:

override func tableView(_tableView: UITableView,
    willDisplayCell cell: UITableViewCell,
    forRowAtIndexPath indexPath: NSIndexPath) {

        if cell.respondsToSelector("setSeparatorInset:") {
            cell.separatorInset = UIEdgeInsetsZero
        }
        if cell.respondsToSelector("setLayoutMargins:") {
            cell.layoutMargins = UIEdgeInsetsZero
        }
        if cell.respondsToSelector("setPreservesSuperviewLayoutMargins:") {
            cell.preservesSuperviewLayoutMargins = false
        }
}

सेल के विभाजक ऐनक को कॉन्फ़िगर करने के लिए, cellForRowAtIndexPath विधि में इसका उपयोग करें,
यह iOS9.0 + के लिए एकदम सही काम करता है

 cell.separatorInset = UIEdgeInsetsZero;
 cell.layoutMargins = UIEdgeInsetsZero;
 cell.preservesSuperviewLayoutMargins = NO;

स्विफ्ट 3 के लिए:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        if cell.responds(to: #selector(setter: UITableViewCell.separatorInset)) {
            cell.separatorInset = UIEdgeInsets.zero
        }
        if cell.responds(to: #selector(setter: UITableViewCell.layoutMargins)) {
            cell.layoutMargins = UIEdgeInsets.zero
        }
        if cell.responds(to: #selector(setter: UITableViewCell.preservesSuperviewLayoutMargins)) {
            cell.preservesSuperviewLayoutMargins = false
        }
    }






uitableview