ile UIView subviews bakıyor:şuna benzer bir görünüm hiyerarşisi Verilen Boyut Kısıtlar
ContainerView
UIScrollView
ModuleView
ModuleView
ModuleView
...
ben ContainerView
(vb listede, ızgara) keyfi bir biçimde dışarı ModuleViews
lay istiyorum. Bunu yapmak için, ModuleViews
aracılığıyla yineleyen -[ContainerView layoutSubviews]
'u uygularım, her birinde -[ModuleView sizeToFit]
'u arayın ve sonra bunları istediğiniz mizanpaja göre birbirlerine göre konumlandırın.
Sorum tekrarını en aza indirmek için ve doğru olarak düzenini korurken ModuleViews
boyutunu değiştirmek için izin -[ModuleView sizeThatFits:]
ve -[ModuleView layoutSubviews]
uygulanmasının en iyi şekilde yapmaktır.
ModuleView
'un bir çok satırlı UILabel
alt görünümü ve her iki tarafındaki dolgu ile UIView
olduğu en basit durumu kullanın. Gördüğünüz gibi
@implementation ModuleView
- (CGSize)sizeThatFits:(CGSize)size {
CGFloat padding = 10.0f;
CGSize labelMaxSize = CGSizeMake(superview.size.width - (2 * padding), CGFLOAT_MAX);
CGSize labelSize = [self.label.text sizeWithFont:self.label.font constrainedToSize:labelMaxSize lineBreakMode:self.label.lineBreakMode];
return CGSizeMake(superview.width, labelSize.height + (2 * padding));
}
- (void)layoutSubviews {
[super layoutSubviews];
CGFloat padding = 10.0f;
CGSize labelMaxSize = CGSizeMake(self.size.width - (2 * padding), CGFLOAT_MAX);
CGSize labelSize = [self.label.text sizeWithFont:self.label.font constrainedToSize:labelMaxSize lineBreakMode:self.label.lineBreakMode];
self.label.frame = CGRectMake(padding, padding, labelSize.width, labelSize.height);
CGRect frame = self.frame;
frame.size.height = self.label.frame.size.height + (2 * padding);
self.frame = frame;
}
@end
, subviews büyüklüğü layoutSubviews
yine sizeThatFits:
kez hesaplanır ve: Bu gibi görünebilir. Bu çalışır, ancak görüşlerin daha karmaşık olduğu zaman hızla bir karmaşa haline gelir.
Bunu basitleştirmenin bir yolu var mı? Başkalarının bu probleme nasıl yaklaştığına dair iyi örnekler bulamadım.
Merhaba Nathan, böyle bir durum için yeni bir çözüm var mı? – jchatard