web-dev-qa-db-ja.com

UITableViewでフッタービューを非表示にする

私はしばらくの間フッタービューを非表示にするに取り組んでいます。私の問題は、ボタンをクリックするとフッターにボタンがあり、最後のセクションとして1つのセクションが下に追加され、ボタンも新しく作成されたセクションに移動するので、表の前のセクションでフッターを非表示にしたいです。セクションの更新後。

footerView.hidden = YES

これをボタンアクションで使用しましたが、機能しません。

19
New Xcoder

4つの解決策があります。彼らです、

ソリューション1:

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

- (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];
}

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

ソリューション2:

サイズタブの下のインターフェースビルダーを介してフッター/ヘッダーの高さを設定できます。

ソリューション3:

セットcontentInsetプロパティ。

self.tableView.contentInset = UIEdgeInsetsMake(-20, 0, -20, 0);

上部と下部をエッジに接触させるために使用されます。

ソリューション4:

以下を実装し、条件に従って値を設定します。 0.0は受け入れられません。下限値は1.0にする必要があります。

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger )section {
    if(section == 0) {
       return 6;
    } else {
       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)];
}
42
Shamsudheen TK

これはそれをするべきです

tableView.tableFooterView.hidden = YES;
15
shabbirv

これはデリゲートメソッドを実装することでそれを行うことができます

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

@ J.Hongの回答を参照すると、Swift4バージョン(iOS 11.3):

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

@Tim Newtonの回答との比較:

  • titleForFooterInSectionを呼び出す必要はありません
  • 簡素化する CGFloat.leastNormalMagnitude-> .leastNonzeroMagnitude(より迅速なIMO)
3

Swift 3.前のセルと次のヘッダーの間の厄介な1px境界も削除するソリューション。

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

override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
    return nil
}
2
Tim Newton

swift4の場合:

self.tableView.tableFooterView = nil
1
Mohamad.j

カスタムビューを使用しない場合は、tableView:titleForFooterInSection:からnilを返し、0からtableView:heightForFooterInSection:を返します。

@property(nonatomic, strong) NSString *footerTitle;
@property(nonatomic, assign) BOOL shouldHideFooter;
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
    return self.shouldHideFooter ? nil : self.footerTitle;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return self.shouldHideFooter ? 0 : UITableViewAutomaticDimension;
}
0
bteapot