tomoyaonishiのブログ

iOSのことを中心に・・・その他もあるよ!

UITableViewでAutoLayoutのワーニングが出る問題の対処方法

画像のようなUITableViewCellをAutoLayoutで組んでいるとき、ふと謎のAutoLayoutのワーニングがでることがあります。

f:id:tomoyaonishi:20190509215414p:plain

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x17ee8ba0 V:[UILabel:0x17efb790(20)]>",
    "<NSLayoutConstraint:0x17edd410 V:|-(2)-[UILabel:0x17efb790]   (Names: '|':UITableViewCellContentView:0x17eeb260 )>",
    "<NSLayoutConstraint:0x17edf100 V:[UILabel:0x17ee4a70]-(0)-|   (Names: '|':UITableViewCellContentView:0x17eeb260 )>",
    "<NSLayoutConstraint:0x17edec60 V:[UILabel:0x17efb790]-(2)-[UILabel:0x17ee4a70]>",
    "<NSAutoresizingMaskLayoutConstraint:0x17f33410 h=--& v=--& V:[UITableViewCellContentView:0x17eeb260(0)]>"
)
Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x17ee8ba0 V:[UILabel:0x17efb790(20)]>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

このようなときは一番下に貼っている制約をpriorityを999にしてみましょう。大体の場合はこれで解決します。

f:id:tomoyaonishi:20190509215524p:plain

おそらく、初回だけcontentViewが小さくで潰れてしまっているか、罫線との兼ね合いで制約が壊れるんだと思います。 対応いれなくても動作には問題ないですが、気持ち悪いですよね。

また、UIStackViewやUIScrollViewなんかでも同じようなことがおこることがあります。

どんなViewでも動作には問題ないけど、縦方向のAutoLayoutのワーニングがあるときはpriorityを下げる対応をいれてみるといいかもしれません。