你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> NSLayoutConstraint

NSLayoutConstraint

編輯:關於IOS

屏幕兼容的問題

為了讓我們的應用在不容尺寸的屏幕下都能 “正常”的表示,我們盡量不要把數據寫死。 大多數可視元素都是一個矩形區域,當然這個矩形區域有坐標的,我們有了這個區域坐標就能確定可視元素的現實位置了。 但是iphone5 和以前的屏幕不一樣了,在以前的設備中,我們可以添加一個 [email protected] 來適應retina屏幕,但是iphoen5咋辦呢? ios 引入了 Auto Layout 的東東,這個要和UIViewAutoresizing 區分下。 看下面代碼 - (void)viewDidLoad {     [super viewDidLoad];              UIView *aView = [[UIView alloc] init];     aView.backgroundColor = [UIColor redColor]; //為了不和autosizing沖突,我們設置No     [aView setTranslatesAutoresizingMaskIntoConstraints:NO];     [self.view addSubview:aView];          UIView *bView = [[UIView alloc] init];     bView.backgroundColor = [UIColor blueColor];     [bView setTranslatesAutoresizingMaskIntoConstraints:NO];     [self.view addSubview:bView];          NSDictionary *views = NSDictionaryOfVariableBindings(aView, bView); //NSDictionaryOfVariableBindings  宏  其實 NSDictionaryOfVariableBindings(v1, v2, v3) 等效於 [NSDictionary dictionaryWithObjectsAndKeys:v1, @"v1", v2, @"v2", v3, @"v3", nil];         [self.view addConstraints:     [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(>=50)-[aView(100)]"                                              options:0                                              metrics:nil                                                views:views]];          [self.view addConstraints:      [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=100)-[aView(50)]"                                              options:0                                              metrics:nil                                                views:views]];         [self.view addConstraints:      [NSLayoutConstraint constraintsWithVisualFormat:@"H:[bView(==aView)]"                                              options:0                                              metrics:nil                                                views:views]];     [self.view addConstraints:      [NSLayoutConstraint constraintsWithVisualFormat:@"V:[bView(==aView)]"                                              options:0                                              metrics:nil                                                views:views]];          [self.view addConstraint:      [NSLayoutConstraint constraintWithItem:bView                                   attribute:NSLayoutAttributeLeft                                   relatedBy:NSLayoutRelationEqual                                      toItem:aView                                   attribute:NSLayoutAttributeRight                                  multiplier:1                                    constant:10]];     //添加一個限制  等效於 bView.frame.origin.x  = (aView.frame.origin.x +aView.frame.size.width)  * 1  + 10,好像是這樣的!個人覺得!   它是一種依賴關系,bView依賴aView,這樣就算aView變了,bView也會跟著變換。     [self.view addConstraint:      [NSLayoutConstraint constraintWithItem:bView                                   attribute:NSLayoutAttributeTop                                   relatedBy:NSLayoutRelationEqual                                      toItem:aView                                   attribute:NSLayoutAttributeTop                                  multiplier:1                                    constant:0]];          [aView release];     [bView release]; }       constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: Create a constraint of the form "view1.attr1 <relation> view2.attr2 * multiplier + constant". 屬性 typedef NS_ENUM(NSInteger, NSLayoutAttribute) {     NSLayoutAttributeLeft = 1,     NSLayoutAttributeRight,     NSLayoutAttributeTop,     NSLayoutAttributeBottom,     NSLayoutAttributeLeading,     NSLayoutAttributeTrailing,     NSLayoutAttributeWidth,     NSLayoutAttributeHeight,     NSLayoutAttributeCenterX,     NSLayoutAttributeCenterY,     NSLayoutAttributeBaseline,          NSLayoutAttributeNotAnAttribute = 0 }; 關系 typedef NS_ENUM(NSInteger, NSLayoutRelation) {     NSLayoutRelationLessThanOrEqual = -1,     NSLayoutRelationEqual = 0,     NSLayoutRelationGreaterThanOrEqual = 1, }; 最後的結果就是 “view1.attr1  <       >=    或者 ==   或者    <=       >  view2.attr2 * multiplier + constant”
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved