zoukankan      html  css  js  c++  java
  • Autoresize UIView to fit subviews

    @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)];
    }
     
    @end

    enter 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
    


    
    
    
        
            

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    每日总结2.26
    《梦断代码》阅读笔记三
    每日总结2.25
    每日总结2.24
    每日总结2.23
    每日总结2.22
    每日总结2.19
    《梦断代码》阅读笔记二
    Java-11 形参和实参
    Java-10 final用法
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879453.html
Copyright © 2011-2022 走看看