web-dev-qa-db-ja.com

Xcode 6ベータ版で「自動サイズ変更マスクを制約に変換して_setHostsLayoutEngine:YESにする必要があります」を取得する理由

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
}

何が間違っていますか?

40
Emwee

これがどの程度役立つかはわかりませんが、セルをテーブルではなくUIViewに直接配置しようとすると、同じエラーが表示されます。これはXcode 5でうまく機能したため、XCode6/ios8のバグであると思われます。それまでの間、そのメソッドをデバッグして、tableViewを見てください。取得しようとしているセルのインスタンスが実際にあることを確認してください。

更新: Appleでバグレポートを提出しました。これはios8の問題であることを確認できます。最終リリースの前に修正されました。

54
pbuchheit

これは[〜#〜] not [〜#〜]バグです。テーブルビューのセルとしてUIViewを使用することはできません。 nibファイルはUITableViewCellです。

31
neevek

私の場合、UIViewに含まれるUITableViewCellを持つnibファイルをロードしていました。 nibファイルで自動レイアウトを無効にした後、再び例外が発生していません。

13
Jose Servet

私もこの問題に遭遇しましたが、これは他の回答で述べたように、UITableViewCellの外側のビュー階層でUITableViewサブクラスが使用されたためです。この場合、時間が限られているため、そのサブクラスにある機能をUIViewサブクラスに移動できませんでした。私が思いついた回避策は、セルが想定されているビュー階層にUIViewインスタンスを作成し、セルインスタンスのビュー階層をそこに移植し、表示されたビューからセル自体を削除することでした階層。セルインスタンスのさまざまなプロパティに有線で移動したビューを保持している限り、すべてが正常に機能し続けます。

それは少しハックですが、リファクタリングする時間が利用可能になるまで物事を実行し続けます。

8
Charles A.

人々、これISバグではありません。

「これはバグではありません。UIViewをテーブルビューのセルとして使用することはできません。nibファイルの最上位ビューがUITableViewCellであることを確認する必要があります。」

私はそれをテストしましたが、動作します。

Xibファイルを作成し、それが持つ最上位のビューを削除する必要があります。その後、UITableViewCellをnibにドラッグアンドドロップします。この方法では、この問題は発生しません。

Note that the top level object in the Xib is a UITableViewCell not a UIView

4
Daniel Molina

私の場合、UIViewでUITableViewCellを使用してカスタムセルを作成していました enter image description here

次に、UIViewからセルを削除し、UIViewのすべてのコンテンツを直接追加して、問題を解決しました。 enter image description here

それがあなたにも役立つことを願っています。ではごきげんよう

3
Kunal Gupta

.xibのプロパティから「自動レイアウトを使用」オプションを選択解除すると、問題が解決しました。 -これが他の人を助けるかもしれないので、私がしたことを投稿する。

ありがとうございました。

3
ashNair

私の場合、セルをコピーして貼り付けましたが、このエラーを引き起こす制約がありませんでした。セルを別のxibファイルにコピーする場合は、制約もコピーされることを確認するか、再度作成します

2
Harsha

私の場合、UITableViewCellの親はUITableViewではなくメインビューでした。この場合、テーブルビュー内にセルを配置するだけです。

正しい階層を気にせずにセルをビューにドラッグすると、これは一般的な問題になると思います。

0
crubio