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
    


    
    
    
        
            

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

  • 相关阅读:
    SDOI Day2
    SDOI Day1
    Codeforces 506E Mr. Kitayuta's Gift (矩阵乘法,动态规划)
    CEOI 2014 wall (最短路)
    BZOJ 3926: [Zjoi20150]诸神眷顾的幻想乡(后缀自动机)
    BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)
    BZOJ 3924: [Zjoi2015]幻想乡战略游戏(动态点分治)
    Nginx与Lua的开发
    Nginx访问控制
    Nginx模块
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879452.html
Copyright © 2011-2022 走看看