删除表中单元格的最后一个分隔符

时间:2015-02-19 01:31:43

标签: uitableview swift ios8

我在我的故事板中设置了一个静态TableView,并且我试图删除最后一个单元格中的分隔符以用于审美目的。我已经查看了本网站和其他网站上的各种答案,他们都指出了IOS8的这类代码

 self.tableView.tableFooterView = UIView()

然而,当我运行应用程序时,分隔符仍然存在。我不太确定我做错了什么。

sep

6 个答案:

答案 0 :(得分:34)

从最后一个单元格中删除分隔符的一种智能方法是添加一个高度仅为1的普通视图。

tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 1)];

答案 1 :(得分:22)

Swift 3 最高投票答案的版本:

tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1))

即使单元格数量是动态的,也能正常工作。

答案 2 :(得分:1)

此解决方案将删除分组表的每个部分中的最后一个分隔符,不需要需要对表或单元格进行子类化。

适用于iOS 8 。 (可能适用于iOS 6+)。

将以下内容添加到您的代理:

#pragma mark - UITableViewDelegate

- (CGFloat) tableView:(UITableView*)table
        heightForFooterInSection:(NSInteger)section {
     // Hide the separator when the table is first displayed
     // of any sections that are visible on the screen.
     [self hideBottomSeparator:table];

     return 0.01f; // Or whatever you already return.
}


- (void) scrollViewDidScroll:(UITableView*)table {
    // Hide separators that are visible after table scrolls.
    // Check that event did not come from other scrollers
    // in the table.
    if ([table isKindOfClass:UITableView.class]) {
         [self hideBottomSeparator:table];
    }
}

- (void) hideBottomSeparator:(UITableView*)table {
    for (UIView* cell in table.visibleCells) {
         [self removeBottomSeparatorFromCell:cell];
    }
}

- (void) removeBottomSeparatorFromCell:(UITableViewCell*)cell {
    for (UIView* view in cell.subviews) {
        if (view.frame.origin.x == 0 &&
                view.frame.origin.y > cell.frame.size.height - 2 &&
                view.frame.size.width == cell.frame.size.width &&
                view.frame.size.height < 2) {
            [view removeFromSuperview];
        }
    }
}

它的工作原理是删除全宽可见单元格中的任何细UIView和单元格的底部(它使顶部分隔符可见)。

要删除顶部分隔符,请注释掉origin.y支票

如果您想从特定部分中删除分隔符,则必须从单元格中获取部分编号。

注意:因为它仅按大小(和位置)删除分隔符,对于非默认表(或单元格)插入值可能会失败,或者iOS更改分隔符的外观。此外,如果更改iOS以使分隔符不是单元格的子视图,则可能会失败,在这种情况下,需要进行一些更严格的扫描才能找到分隔符视图。

它依赖于iOS在调用heightForFooterInSection:

之前将单元格添加到表中

此外,如上所述,将从普通表中删除所有分隔符。

答案 3 :(得分:1)

以下解决方案应该有效,因为所需要的只是一个简单的计算:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return self.tableView.frame.height/X+1/X
}

X是该表中所需的单元格数。

答案 4 :(得分:0)

xamarin.iOS解决方案:

// @flow

import React, { Component } from 'react';
import {
  WebView,
} from 'react-native';

class LoginScreen extends Component {
  state = {
    cookies    : {},
    webViewUrl : ''
  }

  onNavigationStateChange = (webViewState: { url: string }) => {
    const { url } = webViewState;

    // when WebView.onMessage called, there is not-http(s) url
    if(url.includes('http')) {
      this.setState({ webViewUrl: url })
    }
  }

  _checkNeededCookies = () => {
    const { cookies, webViewUrl } = this.state;

    if (webViewUrl === 'SUCCESS_URL') {
      if (cookies['cookie-name-for-jwt']) {
        alert(cookies['cookie-name-for-jwt']);
        // do your magic...
      }
    }
  }

  _onMessage = (event) => {
    const { data } = event.nativeEvent;
    const cookies  = data.split(';'); // `csrftoken=...; rur=...; mid=...; somethingelse=...`

    cookies.forEach((cookie) => {
      const c = cookie.trim().split('=');

      const new_cookies = this.state.cookies;
      new_cookies[c[0]] = c[1];

      this.setState({ cookies: new_cookies });
    });

    this._checkNeededCookies();
  }

  render() {
    const jsCode = "window.postMessage(document.cookie)"
    // let jsCode = "window.postMessage(document.cookie= 'login=; expires=Bla bla bla')"; // if you need to write some cookies, not sure if it goes to shared cookies, most probably no :)

    return (
      <WebView
        source={{ uri: 'AUTH_URL' }}
        onNavigationStateChange={this.onNavigationStateChange}
        onMessage={this._onMessage}
        injectedJavaScript={jsCode}
        style={{ flex: 1 }}
      />
    );
  }
}

export default LoginScreen;

答案 5 :(得分:0)

我通过将分隔符移出视图来解决了这个问题,所以我看不到它

if indexPath.row == settings.count-1{
    cell.separatorInset = UIEdgeInsets.init(
                              top: 0, left: 400, 
                              bottom: 0, right: 0)
}else{
    cell.separatorInset = .zero
}