2014-09-18 14 views
6

Tôi đang sử dụng bố trí ô tô,iOS8 hành vi khác nhau: Autolayout với view.transform = CGAffineTransformMakeScale (0.5, 0.5), xem không được đặt đúng vị trí

Tôi muốn thực hiện một UISwitch nhỏ hơn và sau đó sử dụng view.transform = CGAffineTransformMakeScale(0.5, 0.5) để nhận ra nó.

Có một chế độ xem khác phía trên công tắc này. hàng đầu này chuyển đổi nên được sắp xếp để cạnh hàng đầu của quan điểm này, và có một không gian cố định theo chiều dọc giữa xem và chuyển đổi, như hình sau:

enter image description here Quan điểm về iOS7

Tuy nhiên, có sự xuất hiện khác nhau trên iOS8:

enter image description here Quan điểm về iOS8

có vẻ như những hạn chế không được áp dụng để chuyển đổi này.

Nhưng tôi gọi self.view.layoutSubviews()self.view.layoutIfNeeded()

Nó không làm việc.

Làm cách nào để chuyển đổi này luôn được gắn vào góc dưới cùng bên phải của chế độ xem ở trên?

Dưới đây là chuyển đổi không thu nhỏ lại

enter image description here

+0

Auto Layout không làm việc với biến đổi lớp –

+0

@MaxMacLeod Tôi chỉ tự hỏi tại sao cùng một mã có hành vi khác nhau trên iOS7 và iOS8. Tôi nghĩ rằng bạn có nghĩa là câu trả lời này [link] (http://stackoverflow.com/questions/12943107/how-do-i-adjust-the-anchor-point-of-a-calayer-when-auto-layout-is- đang được sử dụng/14105757 # 14105757), phải không? –

+0

Tôi đoán nó hoạt động như vậy bởi vì kích thước nội dung nội tại của UISwitch vẫn ở mặc định w: 51px h: 31px bất chấp thay đổi của biến đổi chế độ xem. Bạn nên cố gắng phân lớp UISwitch và ghi đè phương thức (CGSize) intrinsicContentSize bằng cách trả về CGSizeMake (25.5f, 15.5f) –

Trả lời

0

Bạn có hai cách có thể để đi ở đây: hoặc UISwitch lớp con và cố gắng áp dụng tất cả những sửa đổi cần thiết trong lớp con, hoặc xác định một UIView mới trong đó bao gồm như một subview một UISwitch sửa đổi. Lớp con có thể là nhanh nhất, nhưng nó phức tạp hơn và rủi ro hơn vì UISwitch không phải là lớp con cho kiểu sửa đổi này.

Giả sử bạn đi con đường subclassing, đây là những thay đổi bạn cần phải thực hiện:

  1. áp dụng rộng transform để self, rõ ràng.

  2. ghi đè alignmentRectForFrame:, vì vậy, nó trả về super.alignmentRectForFrame: cộng với biến đổi tỷ lệ của bạn.

  3. override intrinsicContentSize, vì vậy nó sẽ trả về super.intrinsicContentSize cộng rộng bạn chuyển đổi

Về cơ bản, số 1 nên thực hiện việc chuyển đổi hình ảnh thực tế. Nhưng 2 và 3 là cần thiết để thông báo cho Auto Layout về kích thước của khung nhìn mới, vì mặc định AL không nhận thức được các biến đổi.

0

Các biến đổi của một cái nhìn đang diễn ra xung quanh trung tâm của xem, do đó khi bạn gọi

view.transform = CGAffineTransformMakeScale(0.5, 0.5) 

Nó làm cho cảm giác rằng nó trông như thế này trong iOS 8, lý do mà nó có vẻ tốt trong iOS 7 là có thể là do lỗi trong iOS 7.

Cố gắng thay đổi liên tục của các hạn chế hàng đầu như thế này:

self.switchLeadingConstraint.constant = -(self.mySwitch.bounds.size.width/4) 

Bằng cách này bạn có thể bù đắp vào việt mà bạn có trong iOS 8.

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