Auto Layout Tutorial in iOS 9 Part 2

Trong bài viết này mình sẽ hướng dẫn các bạn hiểu thêm về autolayout trong iOS.

Trước khi tìm hiểu part 2 này chúng ta có thể ôn lại một vài khái niệm về layout, constraint tại part 1 theo link: https://viblo.asia/ngodacdu/posts/aKYMNBLbM83E

  • Trong part 2 này chúng ta bắt đầu bằng một ví dụ đơn giản như sau:

Screen-Shot-2015-09-06-at-6.59.12-PM1-306x500.png

Chúng ta có hai button được set background và giữa chúng có một số constraint được thiết lập (các bạn có thể tham khảo trong part theo link bên trên)

Để có thể làm được như hình vẽ trên chúng ta bắt đầu từ một project với template Single Applicationdisable size classes. Bạn có thể xem hình vẽ để biết cách disable:

Screen-Shot-2015-09-06-at-7.01.03-PM-287x500.png

Tiếp theo chúng ta kéo hai button vào và set background tương ứng màu yellow, green. Chọn green button và thiết lập bottom constraint là 40point (khoảng cách giữa green button và yellow button), chọn yellow button và thiết lập khoảng so với đường biên bên dưới là 8point. Tiếp theo chúng ta cần cho hai button này ra giữa màn hình. Để có thể làm được chúng ta chọn green button và thêm ràng buộc horizontally in the container. Chúng ta làm tương tự với yellow button.

Thêm event touchUpInside cho hai button bằng cách nhấn ctrl và drag button mapping với đoạn code sau:

@IBAction func buttonTapped(sender: UIButton) {
  if sender.titleForState(.Normal) == "X" {
  	// long title
    sender.setTitle("A very long title for this button", forState: .Normal)
  } else {
  	// short title
    sender.setTitle("X", forState: .Normal)
  }
}

Với đoạn code trên có thể hiểu đổi nội dung của hai button mỗi lần event touchUpInside diễn ra.

AutoLayoutSwiftUpdate2-480x146.png

  • Fixing the width

Chúng ta thêm constraint width cho cả hai button, nếu muốn hai button đó bằng nhau thì chúng ta thêm constraint width Equally. Kết quả chúng ta được hai button có chiều rộng bằng nhau (hình vẽ)

Screen-Shot-2015-09-06-at-7.17.35-PM-480x266.png

Chúng ta có thể xem các constraint được tạo ra:

Screen-Shot-2015-09-06-at-7.18.23-PM-384x320.png

Chạy ứng dụng và tap vào hai button thì chúng ta sẽ thấy cho dù button được tap vào có title dài hay ngắn thì chiều rộng của hai button đó luôn bằng nhau.

AutoLayoutSwiftUpdate7-480x108.png

Trên đó chúng ta mới tạo cho hai button có chiều rộng bằng nhau và bằng với chiều rộng của button có title dài hơn. Để có thể fix chiều rộng của hai button bằng nhau và bằng một con số cụ thể thì có thể add constraint width cho một trong hai button bằng con số đó. Trong hình ảnh bên dưới hai button có chiều rộng bằng nhau và bằng 94point

Screen-Shot-2015-09-06-at-7.44.02-PM-335x320.png

Chúng ta có thể thay đổi con số đó bằng cách nhập vào constant attribute bên trong inspector menu.

  • Tiếp theo chúng ta sẽ làm ví dụ có constraint giữa nhiều view với nhau

Add một view với background là green

SwiftAutoLayout14-210x320.png

Mở inspector menu và uncheck margin box

Screen-Shot-2015-09-06-at-8.25.21-PM-241x320.png

Nhập các constraint cho view

Screen-Shot-2015-09-06-at-8.28.25-PM-480x303.png

Ngoài các add constraint cách trái và phải băng nhau để view luôn ở giữa chúng ta còn có thể add constraint khác để đạt được cùng mục đích đó. Bằng cách add horizontal center constraint và width constraint cho view. Tương tự theo chiều dọc cũng vậy (vertical and height constraint)

Screen-Shot-2015-09-06-at-8.25.21-PM-241x320.png

Screen-Shot-2015-09-06-at-8.35.54-PM-387x320.png

Tiếp theo chúng ta add UILabel vào trong view đó, label này cách view kia một khoảng 20point bên dưới (bottom constraint) và luôn ở giữa (horizontal center constraint)

Screen-Shot-2015-09-06-at-8.42.21-PM.png Horizontal center constraint

Screen-Shot-2015-09-06-at-8.43.14-PM-579x500.png Bottom constraint

Add UIImageView trong view và trên label

Screen-Shot-2015-09-06-at-8.46.32-PM-341x500.png

Khi bạn kéo imageView vào không cần phải bận tâm tới vị trí của imageView đó trong view như thế nào. Bạn có thể nhập các constraint (left, top, right, bottom) theo ý muốn.

Screen-Shot-2015-09-06-at-8.48.12-PM-359x500-2.png

Sau đó bạn sẽ thấy hiện các đường nét đứt màu vàng thì nó chính là vị trí đúng với constraint mà bạn add.

Screen-Shot-2015-09-06-at-8.49.01-PM-343x500.png

Bạn chỉ cần fix theo gợi ý đó (update frame)

Vậy trong bài viết này mình đã giúp các bạn hiểu thêm về constraint trong iOS. Hy vọng bài viết giúp ích cho các bạn.

All Rights Reserved