2010-05-26 17 views
8

Tôi đang thử nghiệm bằng cách sử dụng cagradientlayer để vẽ gradient trong ứng dụng của chúng tôi thay vì có một lớp con của uiview quản lý gradient. Một snafu mà tôi đã đi qua là khi xem có gradient như là một lớp con của lớp chính của nó được thay đổi kích cỡ để phù hợp với dữ liệu tôi đang cố gắng để hiển thị, lớp không thay đổi kích thước cùng với nó. Tôi cuối cùng có kết thúc lớp gradient ở kích thước khung hình ban đầu trong khi khung của khung nhìn của tôi lớn hơn nhiều.làm cách nào để tôi có được khung của lớp để tự động thay đổi kích thước dựa trên khung của siêu lớp hoặc khung của chế độ xem?

Có cách nào để lớp con tự động hóa để phù hợp với khung của siêu lớp hoặc khung của chế độ xem của siêu lớp không?

Trả lời

9

Triển khai layoutSubviews trong lớp con của chế độ xem của bạn. Nó được gọi khi khung được thay đổi kích thước (hoặc khi setNeedsLayout được gọi). Chỉ cần thiết lập khung của lớp đến biên giới của xem:

-(void)layoutSubviews 
{ 
    someSubview.frame = self.bounds; // make the subview frame match its view 
} 
+0

Tôi hy vọng sẽ không cần một lớp con ở tất cả, nhưng một số chức năng có thể tồn tại trong CALayers mà tôi có vẻ như không thể tìm thấy rằng sẽ làm điều này cho tôi (subclassing một lớp không phải là ra khỏi câu hỏi mặc dù). – Kevlar

+0

Bạn thay đổi kích thước chế độ xem như thế nào? Tôi thay đổi kích thước khung nhìn bằng cách thiết lập khung và chưa bao giờ phải thay đổi kích cỡ các lớp. – progrmr

+0

Tôi đang đặt khung trong một số trường hợp và cho phép chế độ xem được tự động hóa ở những người khác. tôi nghĩ rằng vấn đề có thể là khi tôi thay đổi kích thước các chế độ xem theo cách thủ công, tôi tắt tính năng tự động hóa các bản xem trước để các bản xem trước không tự thay đổi kích thước; đó có thể là vấn đề của tôi. – Kevlar

2

này sẽ làm việc tốt hơn

-(void)viewWillLayoutSubviews 
+1

Tốt hơn cái gì? Và tại sao? Vui lòng đảm bảo cung cấp câu trả lời hoàn chỉnh. –

+0

Tốt hơn ở chỗ nó thực sự sẽ làm những gì được dự định ở đây, tôi nghĩ vậy. – GregJaskiewicz

+0

Tại thời điểm tôi hỏi câu hỏi này, tôi không nghĩ rằng UIViewController đã có phương pháp đó. Tôi đồng ý rằng nếu quan điểm của bạn là xem cổ phần được quản lý bởi một uiviewcontroller mà bạn sẽ muốn làm điều này thay vì layoutSubviews trong một lớp con UIView. – Kevlar

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