私が作成しているフレームワークのために、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>"
)