0

私が作成しているフレームワークのために、UIView オブジェクトのフレーム プロパティを設定する必要がありますが、AutoLayout がオンになっている間はできません。私の考えは、UIView オブジェクトからすべてのレイアウト制約を削除し、必要なフレームに基づいて新しいものを作成できるということです。

これは私が持っているものですが、エラーが発生して機能しません(以下)。

//Remove current constraints
[self.view removeConstraints:self.view.constraints];


//create x constraint based on new x value
NSLayoutConstraint *xConstraint =[NSLayoutConstraint
                                   constraintWithItem:self.view
                                   attribute:NSLayoutAttributeLeft
                                   relatedBy:NSLayoutRelationEqual
                                   toItem:self.view.superview
                                   attribute:NSLayoutAttributeLeft
                                   multiplier:1.0
                                   constant:self.x];
// add new x constrain
[self.view.superview addConstraint:xConstraint];

//create y constraint based on new y value
NSLayoutConstraint *yConstraint =[NSLayoutConstraint
                                  constraintWithItem:self.view
                                  attribute:NSLayoutAttributeTop
                                  relatedBy:NSLayoutRelationEqual
                                  toItem:self.view.superview
                                  attribute:NSLayoutAttributeTop
                                  multiplier:1.0
                                  constant:self.y];

[self.view.superview addConstraint:yConstraint];

//create width constraint based on new width value
NSLayoutConstraint *widthConstraint =[NSLayoutConstraint
                                  constraintWithItem:self.view
                                  attribute:NSLayoutAttributeWidth
                                  relatedBy:NSLayoutRelationEqual
                                  toItem:nil
                                  attribute:NSLayoutAttributeWidth
                                  multiplier:1.0
                                  constant:self.width];

[self.view.superview addConstraint:widthConstraint];

//create height constraint based on new height value
NSLayoutConstraint *heightConstraint =[NSLayoutConstraint
                                  constraintWithItem:self.view
                                  attribute:NSLayoutAttributeHeight
                                  relatedBy:NSLayoutRelationEqual
                                  toItem:nil
                                  attribute:NSLayoutAttributeHeight
                                  multiplier:1.0
                                  constant:self.height];

[self.view.superview addConstraint:heightConstraint];

これは実行時に起こることです:

編集

要素表示に変更[self.view addConstraint:heightConstraint];した後[self.view.superview addConstraint:heightConstraint];、コンソールに次のメッセージが表示されます

エラー

おそらく、次のリストの制約の少なくとも 1 つが望ましくないものです。これを試してみてください: (1) 各制約を見て、どれが予期しないものかを把握してみてください。(2) 不要な制約を追加したコードを見つけて修正します。(注: 理解できない NSAutoresizingMaskLayoutConstraints が表示されている場合は、UIView プロパティ translatesAutoresizingMaskIntoConstraints のドキュメントを参照してください)

(
    "<NSLayoutConstraint:0x91475c0 H:|-(1)-[UIButton:0x728ab00](LTR)   (Names: '|':UIScrollView:0x72845b0 )>",
    "<NSLayoutConstraint:0x729dad0 H:|-(25)-[UIImageView:0x7284920](LTR)   (Names: '|':UIScrollView:0x72845b0 )>",
    "<NSLayoutConstraint:0x72924d0 UIButton:0x728ab00.leading == UIImageView:0x7284920.leading>"
)
4

1 に答える 1