Swift UITableViewControllerに次のコードがありますが、2行目に_setHostsLayoutEngine:YES例外が含まれるように自動サイズ変更マスクを制約に変換する必要があります。インターフェイスビルダーの設定を変更しませんでした。 (したがって、Autolayoutクラスとサイズクラスの両方がチェックされます)。
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell? {
let cell:TodoItemCell = tableView.dequeueReusableCellWithIdentifier("TodoItemCell", forIndexPath: indexPath) as TodoItemCell
let row = indexPath.row
cell.titleLabel.text = self.todoItems![row].title
self.callback!(row)
// Configure the cell...
return cell
}
何が間違っていますか?
これがどの程度役立つかはわかりませんが、セルをテーブルではなくUIViewに直接配置しようとすると、同じエラーが表示されます。これはXcode 5でうまく機能したため、XCode6/ios8のバグであると思われます。それまでの間、そのメソッドをデバッグして、tableViewを見てください。取得しようとしているセルのインスタンスが実際にあることを確認してください。
更新: Appleでバグレポートを提出しました。これはios8の問題であることを確認できます。最終リリースの前に修正されました。
これは[〜#〜] not [〜#〜]バグです。テーブルビューのセルとしてUIView
を使用することはできません。 nibファイルはUITableViewCell
です。
私の場合、UIViewに含まれるUITableViewCellを持つnibファイルをロードしていました。 nibファイルで自動レイアウトを無効にした後、再び例外が発生していません。
私もこの問題に遭遇しましたが、これは他の回答で述べたように、UITableViewCell
の外側のビュー階層でUITableView
サブクラスが使用されたためです。この場合、時間が限られているため、そのサブクラスにある機能をUIView
サブクラスに移動できませんでした。私が思いついた回避策は、セルが想定されているビュー階層にUIView
インスタンスを作成し、セルインスタンスのビュー階層をそこに移植し、表示されたビューからセル自体を削除することでした階層。セルインスタンスのさまざまなプロパティに有線で移動したビューを保持している限り、すべてが正常に機能し続けます。
それは少しハックですが、リファクタリングする時間が利用可能になるまで物事を実行し続けます。
.xibのプロパティから「自動レイアウトを使用」オプションを選択解除すると、問題が解決しました。 -これが他の人を助けるかもしれないので、私がしたことを投稿する。
ありがとうございました。
私の場合、セルをコピーして貼り付けましたが、このエラーを引き起こす制約がありませんでした。セルを別のxibファイルにコピーする場合は、制約もコピーされることを確認するか、再度作成します
私の場合、UITableViewCellの親はUITableViewではなくメインビューでした。この場合、テーブルビュー内にセルを配置するだけです。
正しい階層を気にせずにセルをビューにドラッグすると、これは一般的な問題になると思います。