2013-03-07 3 views
5

をNSLayoutConstraintsを適用しますそれはちょっと複雑になり、壊れる傾向があります。は、私が前にIBに自動レイアウトの制約を使用して試したと私は、彼らがどのように機能するかを理解し、彼らはなど、明確なことする必要があることを...</p> <p>しかし、あなたが望むのカップルよりも多くを持っているときのUIViewサブクラスに

私は同じ問題を抱えている人についてのブログを読んだだけで、代わりにASCIIコードを使用して制約を作成しました。

コンテンツの量に基づいて動的なサイズを持つカスタムUITableViewCellを持つUITableViewがあります。自動レイアウトの最適な候補。

私はこれを行ういくつかの方法を試しましたが、今ではセルにラベルが1つしかないようにコンテンツを切り詰めました。

周囲の境界線でセルにラベルを塗りつぶす場合はどうすればいいですか?

つまり、セルの各辺からの標準サイズポイントです。私はこのようにそれをやった

...
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     _label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 10, 10)]; 
     _label.textColor = [UIColor colorWithWhite:0.53 alpha:1.0]; 
     _label.backgroundColor = [UIColor yellowColor]; 
     [self addSubview:_label]; 

     NSDictionary *views = NSDictionaryOfVariableBindings(_label); 

     [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[_label]-|" 
                    options:0 
                    metrics:nil 
                     views:views]]; 

     [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[_label]-|" 
                    options:0 
                    metrics:nil 
                     views:views]]; 

     self.backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; 
     self.backgroundColor = [UIColor clearColor]; 
    } 
    return self; 
} 

しかし、セルが表示されたときにラベルが、私はそれを初期化するために使用され、正確CGRectのように左上隅にあると私は、この負荷を取得制約に関するエラーの...

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) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x1f859e40 h=--& v=--& UILabel:0x1f864a00.midX == + 5>", 
    "<NSLayoutConstraint:0x1f86a4f0 H:|-(NSSpace(20))-[UILabel:0x1f864a00] (Names: '|':MyCell:0x1f857740)>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1f86a4f0 H:|-(NSSpace(20))-[UILabel:0x1f864a00] (Names: '|':MyCell:0x1f857740)> 

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. 
2013-03-07 11:56:14.841 unasys[13082:907] 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:0x1f85f7b0 V:|-(NSSpace(20))-[UILabel:0x1f864a00] (Names: '|':MyCell:0x1f857740)>", 
    "<NSAutoresizingMaskLayoutConstraint:0x1f859ec0 h=--& v=--& UILabel:0x1f864a00.midY == + 5>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1f85f7b0 V:|-(NSSpace(20))-[UILabel:0x1f864a00] (Names: '|':MyCell:0x1f857740)> 

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. 
2013-03-07 11:56:14.854 unasys[13082:907] 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:0x1f86a540 H:[UILabel:0x1f864a00]-(NSSpace(20))-| (Names: '|':MyCell:0x1f857740)>", 
    "<NSAutoresizingMaskLayoutConstraint:0x1f859e40 h=--& v=--& UILabel:0x1f864a00.midX == + 5>", 
    "<NSAutoresizingMaskLayoutConstraint:0x1f859e80 h=--& v=--& H:[UILabel:0x1f864a00(10)]>", 
    "<NSAutoresizingMaskLayoutConstraint:0x1ed8e150 h=--& v=--& H:[MyCell:0x1f857740(320)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1f86a540 H:[UILabel:0x1f864a00]-(NSSpace(20))-| (Names: '|':MyCell:0x1f857740)> 

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. 
2013-03-07 11:56:14.858 unasys[13082:907] 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) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x1eda7260 h=--& v=--& V:[MyCell:0x1f857740(143)]>", 
    "<NSAutoresizingMaskLayoutConstraint:0x1f859f00 h=--& v=--& V:[UILabel:0x1f864a00(10)]>", 
    "<NSLayoutConstraint:0x1f85f870 V:[UILabel:0x1f864a00]-(NSSpace(20))-| (Names: '|':MyCell:0x1f857740)>", 
    "<NSAutoresizingMaskLayoutConstraint:0x1f859ec0 h=--& v=--& UILabel:0x1f864a00.midY == + 5>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1f85f870 V:[UILabel:0x1f864a00]-(NSSpace(20))-| (Names: '|':MyCell:0x1f857740)> 

と私はどこでこれをデバッグから始めるべきか分かりません。制約は絶対に最小限ですが、それでも完全に失敗します。

誰かがこの制約が動作するように取得する方法の右方向に私を指すことができますか?

答えて

13

ライン

_label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 10, 10)]; 

はautoresizingmaskが

それはambigiousなって、あなたが設定した制約と競合れ、制約にもなっているデフォルトでは

[_label setTranslatesAutoresizingMaskIntoConstraints:NO]; 

を追加した後ドキュメントはこちらです:setTranslatesAutoresizingMaskIntoConstraints

+0

恐ろしいです!どうもありがとう! – Fogmeister

+0

作品!私はまた、UITableViewCellのだし、それがすべて働いたとして、代わりに自己のself.contentViewにコンテンツを追加するために変更しなければならなかった:Dのおかげで! – Fogmeister

+1

あなたが自動レイアウトエラーで 'NSAutoresizingMaskLayoutConstraint'を参照してください、あなたはそれがありますなぜ、あなたは'オフにすることを忘れてしまったか分からない。基本的場合translatesAutoresizingMaskIntoConstraints'どこか – iain

関連する問題

 関連する問題