@interface UIView (resizeToFit)
-(void)resizeToFitSubviews;
-(void)resizeHightToFitSubviews;
-(void)resizeWidthToFitSubviews;
@end
@implementation UIView (resizeToFit)
-(void)resizeToFitSubviews
{
float w = 0;
float h = 0;
for (UIView *v in [self subviews]) {
float fw = v.frame.origin.x + v.frame.size.width;
float fh = v.frame.origin.y + v.frame.size.height;
w = MAX(fw, w);
h = MAX(fh, h);
}
[self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, w, h)];
}
-(void)resizeHightToFitSubviews{
float h = 0;
for (UIView *v in [self subviews]) {
float fh = v.frame.origin.y + v.frame.size.height;
h = MAX(fh, h);
}
[self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, h)];
}
-(void)resizeWidthToFitSubviews{
float w = 0;
for (UIView *v in [self subviews]) {
float fw = v.frame.origin.x + v.frame.size.width;
w = MAX(fw, w);
}
[self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, w, self.frame.size.height)];
}
@endenter image description here Code is worth a billion words. Here is the solution: @interface UIView (UIView_Expanded) - (void)resizeToFitSubviews; @end @implementation UIView (UIView_Expanded) - (void)resizeToFitSubviews { // 1 - calculate size CGRect r = CGRectZero; for (UIView *v in [self subviews]) { r = CGRectUnion(r, v.frame); } // 2 - move all subviews inside CGPoint fix = r.origin; for (UIView *v in [self subviews]) { v.frame = CGRectOffset(v.frame, -fix.x, -fix.y); } // 3 - move frame to negate the previous movement r = CGRectOffset(r, fix.x, fix.y); [self setFrame:r]; } @end
版权声明:本文为博主原创文章,未经博主允许不得转载。