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
    


    
    
    
        
            

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

  • 相关阅读:
    Mysql数据优化--DBA梳理珍藏篇
    Spring缓存注解@Cacheable
    Spring常用知识点
    谈一谈对MySQL InnoDB的认识及数据库事物处理的隔离级别
    MySQL主从复制的实现过程
    List 与 数组 互转
    位运算实现小正整数乘法
    最大的K个数
    Java 编码与字符(2)
    JSP工作原理
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879452.html
Copyright © 2011-2022 走看看