2015-06-02 15 views
7

Tôi cần thêm một số ràng buộc vào một số UIButton theo chương trình. Tôi cần nó để có nó nằm ở giữa theo chiều ngang để giám sát, tập trung theo chiều dọc để superview, tỷ lệ khung hình để superview và tỷ lệ khía cạnh của nó để tự.Thêm ràng buộc lập trình trong Mục tiêu-C

Bất kỳ ai có thể giúp tôi không?

Cảm ơn bạn.

+0

Bạn có thể liên kết các tài liệu xin vui lòng? tôi đã tìm kiếm rất nhiều nhưng tôi thực sự mới để điều này nên không có gì giúp tôi .. cảm ơn. @Larme – user3783005

+1

https://developer.apple.com/library/ios/documentation/AppKit/Reference/NSLayoutConstraint_Class/? – Larme

Trả lời

22

Tôi sẽ lấy bóng lăn cho bạn để bạn có thể thấy ý tưởng chung, nếu không hãy sử dụng tài liệu theo quy định của Larme.

Thêm ràng buộc trong superview của bạn (có thể là bộ điều khiển chế độ xem của bạn).

NSLayoutConstraint *centreHorizontallyConstraint = [NSLayoutConstraint 
             constraintWithItem:self.uiButton 
             attribute:NSLayoutAttributeCenterX 
             relatedBy:NSLayoutRelationEqual 
             toItem:self.view 
             attribute:NSLayoutAttributeCenterX 
             multiplier:1.0 
             constant:0]; 

[self.view addConstraint:centreHorizontallyConstraint]; 

Như bạn có thể thấy chúng ta đang nói đến hạn chế các trung tâm x thuộc tính của UIButton quá trung tâm x thuộc tính của điều khiển Xem xem không có offsets bổ sung (multiplier thiết lập để 1.0 và liên tục 0).

Đảm bảo bạn thêm nó vào chế độ xem của bộ điều khiển chế độ xem không phải là nút vì nút này chưa được đặt tại thời điểm này và do đó bạn không thể thêm ràng buộc vào nút đó! (Xin vui lòng ai đó sửa tôi nếu tôi sai ở đây). Tôi thêm các ràng buộc của tôi trong phương thức viewDidLoad.

13

Tôi đã tìm thấy hướng dẫn này tốt nhất.

http://www.tutorialspoint.com/ios/ios_auto_layouts.htm

yêu cầu của tôi là thiết lập:

  • Leading Space
  • Lên trên Space
  • cố định Width
  • cố định Chiều cao

Thêm NSLayoutConstraint với mã bên dưới tôi đã có thể đạt được nó

self.btnCoin.translatesAutoresizingMaskIntoConstraints = NO; 
/* Leading space to superview */ 
NSLayoutConstraint *leftButtonXConstraint = [NSLayoutConstraint 
              constraintWithItem:self.btnCoin attribute:NSLayoutAttributeLeft 
              relatedBy:NSLayoutRelationEqual toItem:self attribute: 
              NSLayoutAttributeLeft multiplier:1.0 constant:30]; 
/* Top space to superview Y*/ 
NSLayoutConstraint *leftButtonYConstraint = [NSLayoutConstraint 
              constraintWithItem:self.btnCoin attribute:NSLayoutAttributeTop 
              relatedBy:NSLayoutRelationEqual toItem:self attribute: 
              NSLayoutAttributeTop multiplier:1.0f constant:258]; 
/* Fixed width */ 
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self.btnCoin 
                    attribute:NSLayoutAttributeWidth 
                    relatedBy:NSLayoutRelationEqual 
                     toItem:nil 
                    attribute:NSLayoutAttributeNotAnAttribute 
                    multiplier:1.0 
                    constant:35]; 
/* Fixed Height */ 
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.btnCoin 
                    attribute:NSLayoutAttributeHeight 
                    relatedBy:NSLayoutRelationEqual 
                     toItem:nil 
                    attribute:NSLayoutAttributeNotAnAttribute 
                    multiplier:1.0 
                    constant:12]; 
/* 4. Add the constraints to button's superview*/ 
[self addConstraints:@[leftButtonXConstraint, leftButtonYConstraint, widthConstraint, heightConstraint]]; 

Trong mã ở trên, tôi đặt nút trái constraints. Đây là kết quả:

Portrait

Landscape

+0

hằng số trung bình này là gì: 258, hằng số: 35 vv cách chúng ta sử dụng giá trị số này? –

+0

'NSLayoutAttributeLeft multiplier: 1.0 hằng số: 30];' là vị trí của điều khiển từ cạnh trái 'NSLayoutAttributeTop multiplier: 1.0f constant: 258];' là vị trí của điều khiển từ trên cùng. –

Các vấn đề liên quan