問題タブ [heightforrowatindexpath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1776 参照

ios - セルの再利用によって UITableView セパレーターが正しく描画されませんか?

私はストーリーボードを使用して iOS 5 プロジェクトに取り組んでいるため、IB で動的テーブル セル プロトタイプを使用しています。ビューの 1 つで、セルの高さがコンテンツの高さから計算された、高さが可変のセルを含むテーブル ビューがあります。

tableView:heightForRowAtIndexPath:テーブル ビューが最初に表示されたときに、すべてのセルに対して正しい値を返します。いくつかのアイテムを下にスクロールするとすべて問題ありませんが、何かがうまくいかないことがあります。実際のセルは、タッチ領域を含めて正しい高さのように見えますが、セパレーターが間違った場所 (セル間ではなくセル内) にレンダリングされます。

セパレーターの配置を測定すると、セルの再利用がこれと関係があるように見えます。最初の 3 つのセルのセパレータは正しく表示されますが、4 番目のセルは正しく表示されません。heightForRowAtIndexPath:正しい高さ (この場合は 125 ピクセル) を返し、含まれるサブビューはすべて適切な場所に配置されます。ただし、セパレータは前のセパレータから 108 ピクセルだけレンダリングされ、セルの高さ 125 ピクセルの領域内に配置されます。

キッカーは次のとおりです。108px は最初のテーブル セルの高さで、現在は見えなくなっており、おそらく再利用されています。これについて明確な証拠はありませんが、テーブル ビューはheightForRowAtIndexPath:これらのセルを無視しており、再利用されたセルの高さに応じてセパレータをレンダリングしているようです。

これは、後の短いセルの束がセパレーターとしてまったくレンダリングされない理由を説明していません。しかし、これは私が続けなければならないすべてです。

回避策、IB 設定、またはその他に役立つものはありますか?

0 投票する
1 に答える
589 参照

uitableview - UItableviewcellは、UITableViewCellクラス内からカスタムの高さを設定します

myTableViewCellクラスを作成したとしましょう。

関連するtableviewcontrollerメソッド(heightForRowAtIndexPath ..)を実行する以外に、このクラス内からこのセルのデフォルトの高さを設定できますか?

0 投票する
1 に答える
673 参照

ios - 読み込み時に heightForRowAtIndexPath が時々クラッシュする、NSCoding - iOS

データを保存する方法に関するいくつかの情報: ユーザーが追加および削除するビュー コントローラーの配列があります (これは基本的にメモを取るアプリであり、ビュー コントローラーはフォルダーです)。View Controller には、アプリが保存する必要があるいくつかの動的プロパティと、その中のメモ配列があり、Note オブジェクト自体にも、保存する必要があるいくつかのプロパティがあります。もちろん、View Controller と Notes の両方に適切な NSCoding 機能があります。これは、たとえば View Controller のものです。

Controller の配列は Singleton クラスに属します。NSCoding は単純なものと考えられていても、かなり混乱しますが、これまでのところ、Singleton に Controllers 配列を保存するように指示するだけで成功しました。これにより、View Controller に含まれるすべてのプロパティが (正常に) 保存されますそれらのプロパティとすべてのメモのプロパティも同様です。シングルトンのコードは次のとおりです。

次に、Folder View Controller で save メソッドを数回呼び出します。

そして、アプリのロード時にランダムにクラッシュするまで、これは数回うまく機能します。原因は、heightForRowAtIndexPath です。

次のエラーが表示されます。

「__NSCFString」と「インスタンスに送信された認識されないセレクター」は、関連するCellIsSelectedがブール値であるため、あるべきではない場所に文字列があることを意味することを理解しています。ただし、heightForRow で「currentNote.myHeight」のみを返すと、float である myHeight でも同じ __NSCF エラーが発生します。heightForRow をまとめて取り出すと、適切な高さの定義を除いてすべてが機能します。

ところで、heightForRowAtIndexPath が参照しているテーブル ビューは、notes 配列が作成されて入力された後に loadView で作成されます。なぜこのエラーがたまにしか表示されないのか (アプリを 5 ~ 10 回開く、保存する、閉じる、再度開くなど)、一見ランダムに見える理由がわかりません。この動作の原因となるパターンが見つかりません。ポインタはありますか?

混乱して申し訳ありません。私は iOS プログラミングが初めてで、ここで多くのことを間違っていると確信しています。

編集 - また、アプリがクラッシュすると、アンインストールして再インストールするまで (heightForRow を無効にしない限り) 再度開くたびにクラッシュしたままになります。

0 投票する
6 に答える
3856 参照

ios - EXC Bad AccessエラーをスローするindexPathの行の高さ

そのため、以下の if ステートメントを入力すると、EXC Bad Access エラーが発生します。ちょっとイライラするのは、indexPath と tableView が正しい場所を指していることを確認したことです。また、まったく同じ if ステートメントが、同じ実装ファイル内のコードの他の場所でエラーなしで使用されています。

助けていただければ幸いです。

0 投票する
2 に答える
4826 参照

ios - contentViewフレームなしでUITableViewCellの高さを計算するための最良の方法

まとめ

セルのフレームまたはそのコンテンツビューがどのようになるか(編集、回転、アクセサリビューなどのため)が常にわからないtableView:heightForRowAtIndexPath:場合、セルに高さを計算するための最良の方法は何ですか?可変高さのテキストフィールドまたはラベル?

私の1つにはUITableViewController's、次のプレゼンテーションが含まれています:UITextViewを使用したUITableViewCell。

UITextViewは、UITableViewCellと同じ幅と高さである必要があります。

ここに画像の説明を入力してください

UITableViewCellサブクラスを作成し、それをUITextViewで初期化しました(UITextViewはUITableViewControllerのプライベートフィールドです)

UITableViewCellサブクラスに次のメソッドを実装しました。

そしてもちろん、私は次のUITableViewDataSourceメソッドを実装しました(見てください!私はself.view.frame.size.widthを使用しています(しかし実際にはUITableViewCell contentViewフレーム幅が必要です):

また、次のメソッドを実装しました(これはそれほど重要ではありませんが、とにかく投稿しません。セルの高さが動的であることを説明するために、UITextViewでテキストを変更すると縮小または拡大します)

そして今、私の質問は次のとおりです。 ビューをロードした後、UITableViewControllerは次の順序でメソッドを呼び出しています:(簡略化のためにtitleForHeaderInSectionなどの一部を削除します)

そしてその時だけ

見て!cellForRowAtIndexPathの前に正しいUITableViewCellの高さを返す必要があります!つまり、UITableViewCellcontentViewフレームがわかりません。そして、私はそれをプログラムで取得することはできません。

この幅は、次のいずれかになります。

  1. iPhoneプレーンテーブル、縦向き
  2. iPhoneプレーンテーブル、横向き
  3. iPhoneグループテーブル、縦向き
  4. iPhoneグループテーブル、横向き
  5. iPadでも同じです(別の4つの値)

また、UITableViewCellのaccessoryTypeのため、またはUITableViewの編集状態のために、contentViewフレームが小さくなる可能性があることを忘れないでください。(たとえば、任意の編集状態および任意のaccessoryViewで任意の高さの複数行UILabelを持つUITableViewCellがある場合)

したがって、この問題は根本的なものです。セルレイアウトcontentViewの前にこの高さを返す必要があるため、制約のためにセルcontentViewフレーム幅を取得できません。(ちなみに、これはかなり論理的です)しかし、このcontentViewフレームは本当に重要です。

もちろん、この幅を正確に把握して「ハードコード」できる場合もあります(たとえば、UITableViewCellAccessoryDisclosureIndicatorの幅は20ピクセルで、tableViewを編集状態にできない場合は、self.view.frame.size.width-20とタスクを記述できます。終わらせる)!または、contentViewがUITableViewControllerのビューフレームと等しい場合もあります。

-tableView:heightForRowAtIndexPath:メソッドでself.view.frame.widthを使用していることがあります(今のように、かなりうまく機能しますが、グループ化されたUITableViewのために完全ではありませんが、いくつかの定数値を減算する必要があります。 2つのデバイス*2つの向き)

UITableViewCellにいくつかの#defined定数がある場合があります(幅が正確にわかっている場合)...

ダミーの事前に割り当てられたUITableViewCellを使用している場合があります(これはばかげていますが、非常にエレガントで使いやすい場合もあります)...

しかし、私はそれの何も好きではありません。

最良の決定は何ですか? たぶん、アクセサリビュー、デバイスの向き、デバイスタイプ、テーブルビューの編集状態、テーブルビューのスタイル(プレーン、グループ化)、コントローラービューフレームなどのパラメーターで初期化されるヘルパークラスを作成する必要があります。いくつかの定数(グループ化されたtableViewオフセットなど)を使用して、予想されるUITableViewCell contentView幅を見つけますか?;)

ありがとう

0 投票する
1 に答える
1258 参照

xcode - UITableViewCell-heightForRowAtIndexPath-アニメーション速度xcodeObjectiveC

セルの行の高さを変更する場合

それで、

テーブルセルは、変更されている場合は高さまでアニメーション化されます。

このアニメーションの速度を制御する方法はありますか?

0 投票する
1 に答える
412 参照

iphone - 行の高さが可変の UITableview が並べ替え時にクラッシュする

UITableViewバグがあるようです。simpleUITableViewが作成され、編集モードが YES に設定されています。すべての行の高さが異なります。例えば、

2 番目の行のアプリケーションの再注文コントロールに触れるとクラッシュします。おそらく、これらの行の高さにより、非表示を下からUITableView自動スクロールする必要がありますが、それを処理する必要がありました。UITableViewCellUITableView

何か案が…。

0 投票する
3 に答える
4653 参照

ios - UITableViewCellフレームの高さがtableView:heightForRowAtIndexPathと一致しません:

可変の高さのカスタムテーブルセルを使用してUITableViewを作成しています。その高さは、含まれている複数行のUILabelのサイズによって決まります。デリゲートメソッドを接続し、を使用してtableView:heightForRowAtIndexPath:最終的な高さを正しく計算しましたsizeWithFont:constrainedToSize:

奇妙な問題に遭遇しました。データソースメソッドtableView:cellForRowAtIndexPath:が呼び出されるまでに、行ごとの正しい高さは上記のようにすでに決定されていますが、セルのフレームがその高さと一致していません。代わりに、frame.size.heightセルのプロパティは、高さではなく、テーブルビューのデフォルトのセルの高さ(86 px、Interface Builderで設定したように、含まれているUILabelにテキストが1行しかない場合の正しい高さ)です。そのtableView:heightForRowAtIndexPath:インデックスパスに対して正しいと判断されました。

私はcellForRowAtIndexPath:デキューを使用してセルを生成しています。つまり、

したがって、iOSが舞台裏で何をしていても、デキューはセルのフレームプロパティを計算された高さに一致するように設定していないようです。これ自体はそれほど驚くべきことではなく、デキューはセルインスタンスのジオメトリではなく、セルインスタンスに関係します。ただし、セルは正しくレンダリングされるため、heightプロパティはどこかに設定されていますが、その後に発生しcellForRowAtIndexPath:ます。

つまり、最初にテーブルビューにデータを入力するcell.frame.size.heightと、リストを下にスクロールしたときに初めて表示されるすべてのセルで86になります。正しいジオメトリは、cellForRowAtIndexPath:表示される前に各行の最初の後に設定されるため、上にスクロールすると、再利用後に表示される各セルの高さプロパティが正しくなります。

この後、テーブルビューを自由に前後にスクロールでき、その時点以降、各セルの高さプロパティは正しいままです。

デキューベースの再利用が発生する前に、最初に正しいセルの高さを取得する正しい方法は何ですか?テーブルセルのサブビューの位置を少し変更するには、これが必要です。手動で呼び出してから、新しく作成したCustomCellインスタンスのフレームをその高さに一致するように手動で設定する必要がありheightForRowAtIndexPath:ますcellForRowAtIndexPath:か?これは冗長に思えます。この冗長性を回避するために、セルが間違ったフレーム高で初めて作成されたときと、後で正しいフレーム高でデキューされたときを検出するメカニズムを作成する必要があります。

ですから、誰かがこの背後にある論理に光を当てることができれば、私はそれを感謝します。

0 投票する
2 に答える
2759 参照

ios - heightForRowatIndexPathはセルの高さを設定しません

3つのグループでグループ化されたテーブルビューを作成しようとしていますが、各グループには異なる高さのセルがあります。ストーリーボードに適切な高さで3つのプロトタイプセルを設定し、各行に適切な高さを返すようにUITableViewControllerを設定しました。ただし、何らかの理由で、画面に表示されたときのセルの高さは1ピクセルしかありません。

コードをステップ実行すると、行ごとに正しい高さとセルが返されます。また、返される前に、各セルのフレームが正しいことを確認しました。ただし、呼び出すと、各行の高さが1ピクセルしかないrectForRowAtIndexPathことがわかります。rect

一定のセルの高さを使用すると、この問題は完全に解消されます。そのような状況では、セルは完全に表示されます。高さが可変である必要があるため、セルの一部は短すぎる/高すぎる場合があります。

ここで何が起こっているのかアイデアはありますか?を使用すると、各行のrectがどのように決定されるかを理解したいと思いheightForRowAtIndexPathます。

heightForRowAtIndexPathのコード:

0 投票する
1 に答える
946 参照

iphone - AFNetworking setImageWithURL - 返された画像の高さを取得しますか?

カスタム tableviewcell 内に画像を設定し、返された画像の高さを heightForRowAtIndexPath メソッド内で使用しようとしています。

この返されたデータを heightForRowAtIndexPath メソッドに取得する方法はありますか? 現在、私はローカル辞書を使用しており、以下のように設定しています:

より効率的なアプローチに関する指針は大歓迎です。

乾杯ニック