2017-02-15 5 views
5

iOS 8用に、ページの1つにグループ化されたUITableViewを使用するアプリを作成しました。 「デフォルト」のスペースを削除するために、セクションヘッダーとフッターの高さにCGFloat.leastNormalMagnitude(またはSwift 2以下でCGFloat.min)を使用するセクションが複数あります。すべては、このエラーでクラッシュIOSの9及び10において、アプリケーションの実行までうまくいった:UITableViewセクションヘッダーのCGFloat.leastNormalMagnitudeを返すとクラッシュする

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'section header height must not be negative - provided height for section 0 is -0.00000'

どういうわけか、(丸め0除く)1下で任意の値を負として扱われる - とリターンとして1を使用してヘッダー/フッターのスペースが再び表示されます。

これを修正する回避策はありますか?

ありがとうございます。

+0

CGFloat.leastNormalMagnitudeは負の値として扱われるか、1.0未満の値は負の値として扱われますか? – user3581248

+0

はい、私は理由を知らない:| – edopelawi

+0

「0」だけを返してみましたか?それは私のために働く – redent84

答えて

7

IはtableView(_:heightForHeaderInSection:)ためのいくつかの値を試み、そしてことを見出した:

  • leastNormalMagnitudeleastNonzeroMagnitudeがマイナス(したがってクラッシュ)として扱われます。
  • ゼロを設定すると、TableViewはheader/footerとしてデフォルトの高さを返します。
  • ゼロと1の間の値は、マイナスとして扱われます。
  • TableViewはデフォルトの高さを返します。
  • 複数のもの(1.1など)はすべて、ヘッダー/フッターを実際の高さに設定します。

私の問題を解決するために1.1が使用されました。

これが誰かを助けてくれることを願っています!

そのような構成によると
+0

1.1を設定することであなたの問題をどのように解決したのか分かりません。 高さを1.1に設定すると、あなたのセクションのヘッダーのためのスペースは右でしょうか? – Salah

+0

@Salahはい、私はテーブルビューと同じ背景色を使用するビューで1.1スペースを埋めることになりました。 – edopelawi

0

私は私がセクションヘッダの高さを設定した場合、同じ問題があります。それは、その後

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

tableView.sectionHeaderHeight = UITableViewAutomaticDimension 
tableView.estimatedSectionHeaderHeight = CGFloat.leastNormalMagnitude 

しかし、私は私のテーブルビューのためのデリゲートとしての私のコントローラ(UITableViewDelegate)を設定し、実装している場合を作品

+0

あなたの応答をありがとう、tableViewの' sectionHeaderHeight'と 'estimatedSectionHeaderHeight'を設定せずに' UITableviewDelegate'セットで問題が発生しました' – edopelawi

0

多分CGFloat.leastNonzeroMagnitudeが必要です!

+0

あなたの答えをありがとう、しかし、それはまだその値でクラッシュしました:( – edopelawi

-1

:私はいくつかの試みとのおかげで後に、また、すべてのヘッダーなし(なし空白スペース)を持つセクションで、estimatedSectionHeaderHeightは私のカスタムヘッダーのために正しく動作持って管理し

tableView.estimatedSectionHeaderHeight = 50.0; 
tableView.sectionHeaderHeight = UITableViewAutomaticDimension; 

edopelawiの説明。でも、カスタムのためにUITableViewAutomaticDimensionで正常に動作しませんでした代わりに、この1の

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    id bannerObject = [self bannerObjectForSection:section]; 

    if(bannerObject) { 
     return UITableViewAutomaticDimension; 
    } else { 
     return 0.01f; 
    } 
} 

、:

は、私はこの方法(bannerObject =カスタムヘッダビュー、無bannerObject =もない空白)を使用する必要がありましたヘッダー:

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section { 
    id bannerObject = [self bannerObjectForSection:section]; 

    if(bannerObject) { 
     return 50.0; // UITableViewAutomaticDimension don't calculate the correct size of custom headers 
    } else { 
     return 1.1; 
    } 
} 
関連する問題