iOSXib布局后用代碼修改約束的值

如何修改autolayout約束的值?

目前我已知的方法有5種

  • 1戈稿、修改frame(有時候可能會不起作用,但可以做動畫)
  • 2徒像、修改約束的float
  • 3绑咱、使用VisualFormat語言
  • 4显拜、使用constraintWithItem,按倍率改變 如 2x+1=Y
  • 5涂籽、移除約束remove at runtime,添加新的約束

在實際的開發(fā)中我們經(jīng)常需要適配不同的屏幕尺寸和系統(tǒng)版本砸抛,這時我們就需要用代碼對我們的布局進行適當(dāng)?shù)恼{(diào)整

下面介紹下第2種方法:
直接修改約束的值评雌,這是最直接最簡單,也是官方推薦的方法直焙!比移除約束再添加約束省事不少景东!

首先咱們來拖拽一個viewviewController上,設(shè)置好上左寬高的值奔誓,確定view的位置:
效果和約束值如下:


可以看出斤吐,約束是:距離左邊 10,上邊 61,寬高為117曲初、111

我們對圖中的ViewController綁定類之后体谒,拖拽幾個約束到綁定的ViewController類的延展中去:

如何拖拽?


我們試著拖拽左邊約束和高度約束到viewcontroller.m的延展中去

拖拽效果:


拖拽過程中會產(chǎn)生一條線,松手后需要你給這outlet填寫一個名詞臼婆,點擊connect或者回車抒痒,代碼中就有啦!

原拖拽成功的最終在代碼中的效果是:


下面我們來修改颁褂,這個viewtop上邊界的故响,和view的高度,使其都增加100:

代碼如下:

//
//  ViewController.m
//  SizeClass
//
//  Created by http://blog.csdn.net/yangbingbinga 15/1/21.
//  Copyright (c) 2015年 http://blog.csdn.net/yangbingbinga All rights reserved.
//
 
#import ViewController.h
 
@interface ViewController ()
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *top;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *height;
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
     
     
//    self.top.constant+=100;
//    self.height.constant+=100;
     
 
}
 
@end

當(dāng)我們注釋這段代碼的時候颁独,運行的效果是這個樣子的:


可以看到彩届,這個view的寬高我們設(shè)置的是一樣的:

當(dāng)我們把注釋打開時:

//
//  ViewController.m
//  SizeClass
//
//  Created by http://blog.csdn.net/yangbingbinga 15/1/21.
//  Copyright (c) 2015年 http://blog.csdn.net/yangbingbinga All rights reserved.
//
 
#import ViewController.h
 
@interface ViewController ()
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *top;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *height;
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
     
     
    self.top.constant+=100;
    self.height.constant+=100;
     
 
}
 
 
@end

運行效果如下:


可以看到top的值和之前比增加了100,高度也增加了100誓酒!

可以說明的是樟蠕,每一個NSLayoutConstraint的對象都有constant值,我們拖拽到代碼中可以直接改變其值靠柑,也不會產(chǎn)生任何警告和沖突寨辩!

但是,這還沒完歼冰,你在開發(fā)時可能會遇到靡狞,在viewDidLoad中修改過constant值,或者修改其他約束的值隔嫡,卻沒有產(chǎn)生任何效果:

這是因為:你在storyboard設(shè)置的約束是這樣處理的:你在 viewDidLoad中修改的約束的代碼塊運行了甸怕,但是運行完之后又被 storyboard自己的配置給覆蓋了,所以你看到的還是你之前設(shè)置的約束腮恩!

解決辦法:讓修改constant值或者約束的語句延遲執(zhí)行即可梢杭!即使是0.1秒,也能讓在storyboard初始完成之后你再修改相應(yīng)的約束庆揪,這樣就不會被覆蓋掉了式曲!

具體方法:見代碼

//
//  ViewController.m
//  SizeClass
//
//  Created by http://blog.csdn.net/yangbingbinga 15/1/21.
//  Copyright (c) 2015年 http://blog.csdn.net/yangbingbinga All rights reserved.
#import ViewController.h
@interface ViewController ()
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *top;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *height;
@end
@implementation ViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self performSelector:@selector(modifyConstant) withObject:nil afterDelay:0.1];//延遲加載,執(zhí)行
  
    //modifyConstant,0.1秒之后再 改變約束值!
}

- (void)modifyConstant//把修改的代碼放在一個方法里!
{ 
     self.top.constant+=100; 
     self.height.constant+=100;}
}

@end

這樣就可以解決在viewDidLoad中修改約束值失敗的問題了!

參考:
http://www.cnblogs.com/xiaoxiaoyublogs/p/5863890.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缸榛,隨后出現(xiàn)的幾起案子吝羞,更是在濱河造成了極大的恐慌,老刑警劉巖内颗,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钧排,死亡現(xiàn)場離奇詭異,居然都是意外死亡均澳,警方通過查閱死者的電腦和手機恨溜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門符衔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糟袁,你說我怎么就攤上這事判族。” “怎么了项戴?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵形帮,是天一觀的道長。 經(jīng)常有香客問我周叮,道長辩撑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任仿耽,我火速辦了婚禮合冀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘项贺。我一直安慰自己君躺,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布开缎。 她就那樣靜靜地躺著晰洒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啥箭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天治宣,我揣著相機與錄音急侥,去河邊找鬼。 笑死侮邀,一個胖子當(dāng)著我的面吹牛坏怪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绊茧,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼铝宵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了华畏?” 一聲冷哼從身側(cè)響起鹏秋,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亡笑,沒想到半個月后侣夷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡仑乌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年百拓,在試婚紗的時候發(fā)現(xiàn)自己被綠了琴锭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡衙传,死狀恐怖决帖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蓖捶,我是刑警寧澤地回,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站腺阳,受9級特大地震影響落君,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亭引,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一绎速、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧焙蚓,春花似錦纹冤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宏浩,卻和暖如春知残,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背比庄。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工求妹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人佳窑。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓制恍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親神凑。 傳聞我的和親對象是個殘疾皇子净神,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件溉委、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,058評論 4 62
  • 來個大整容 app在橫屏狀態(tài)下是不顯示iPhone的狀態(tài)欄的(就是有個小電池的那一欄)鹃唯,除非你強制app這樣做。這...
    Billionfan閱讀 3,950評論 8 9
  • (嚴(yán)肅微笑臉)女人穿得少不應(yīng)該成為男人犯罪的理由。難不成為了不成為強盜犯罪的理由型宝,富人還不能蓋豪宅八匠? 富人敢住豪宅...
    去社閱讀 83評論 2 0
  • 她的嘴角 還有殘留的胡渣 她的腿毛 還是有點濃密 屁股扁平 乳房很假但也很挺 足夠愉悅她的男人們 他還是沒有 完全...
    向日葵愛呀愛太陽閱讀 161評論 0 0