Help us understand the problem. What is going on with this article?

autolayout + コード

More than 3 years have passed since last update.

autolayoutやっと勉強使い始めたけど、コードでViewを変更するときに苦労したからまとめ

①frameで変更出来ない

view.frame = CGRectMake(0.0, 0.0, 100.0, 200.0);
ッて感じでコードしてい変形してた所
数字をどうするかは別途置いといてこうゆう場合は
objc:sample
view.translatesAutoresizingMaskIntoConstraints = YES;
view.frame = CGRectMake(0.0, 0.0, 100.0, 200.0);

って感じで「translatesAutoresizingMaskIntoConstraints」でオートレイアウト状態を解除する必要があります。

②コードでautolayout変更したい

で次にどーせなんだからコードでオートレイアウトしようとqiitaで調べると
コードでAutolayout
とかあるんですがこれだとやりたかったことには足りなくて
やりたかったこととしては回転による制約の付け替え
ってのがあって、制約は一度つけるそのままaddしても増えない。
かつ調べる内に上のやり方は準非推奨みたいな非推奨だけどまだ線はひかれてない?
iOS8でコードでのAutoLayoutのやり方が地味に変わっていた件
- addConstraints: Reference
ッて感じで公式みても8.0でなんとかかんとか書いてありますね。
ってことで正解としてはたぶん
objc:sample
NSArray *constraints;
// 制約の解除
[NSLayoutConstraint deactivateConstraints:constraints];
// 制約の作成
constraints = @[
[NSLayoutConstraint constraintWithItem:_greenView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:_bgView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0.0],
[NSLayoutConstraint constraintWithItem:_greenView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:_bgView
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:0.0]
];
// 制約の設定
[NSLayoutConstraint activateConstraints:constraints];

ッて感じの流れになる。

デフォルトの制約は邪魔

後outletで設定してるものをコード制約でやりたい場合は
スクリーンショット 2015-11-02 1.48.47.png
って感じで
「Remove at build time」
を設定する必要がある。
 ※すみません、参考にしたサイト忘れました。
制約つけとかないとエラーマークでちゃうからこれなんだろうな〜

☆まとめ
 コードで変更する場合は
 ①オートレイアウトを解除してframeで変更
 ②オートレイアウトで変更(付けかえ、「Remove at build time」意識)
ッて感じでやる必要があるっぽい。
他にもあるとは思うけど。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away