Tôi có một lớp con UIView tùy chỉnh bổ sung một subview programatically trong quá trình khởi tạo. Tôi muốn subview này được chiều rộng tương tự như UIView tùy chỉnh.Cách lấy kích thước của UIView tùy chỉnh được thêm qua bảng phân cảnh trong initWithCoder :?
Mã của tôi hoạt động fine nếu tôi lập trình thêm UIView tùy chỉnh. Tuy nhiên, khi UIView được khởi tạo qua StoryBoard, tôi không thể có được chiều rộng của UIView tùy chỉnh.
// Init programatically
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSLog (@"view: %f", self.frame.size.width); //WILL return width
NSLog (@"view: %f", self.bounds.size.width); //WILL return width
}
return self;
}
// Init from storyboard
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
NSLog (@"view: %f", self.frame.size.width); //Returns 0
NSLog (@"view: %f", self.bounds.size.width); //Returns 0
}
return self;
}
Khi initWithCoder: được điều hành bởi kịch bản, khung vọt của UIView đều trở như 0. Có cách nào tiếp cận kích thước của UIView trong initWithCoder ?? Hoặc, ít nhất là truy cập vào các kích thước trước khi drawRect: được gọi?
Cảm ơn.
Aaaah. Cảm ơn bạn! Khi thử nghiệm bạn thực sự đúng. layoutSubviews: có kích thước có sẵn và được gọi trước drawRect:! Chỉ cần những gì tôi đang tìm kiếm. –
Để thêm giải thích thêm một chút, nếu bạn đang sử dụng Autolayout (mà tôi nghĩ bạn) thì các giới hạn của khung nhìn của trình điều khiển xem và các phần phụ của nó không khả dụng cho đến khi bố cục diễn ra - 'viewDidLayoutSubviews' được gọi trên khung nhìn của bạn điều khiển sau khi điều này đã xảy ra. – jrturton
Cảm ơn bạn đã trợ giúp :) –