• 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
    


    
    
    
        
            

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

  • 相关阅读:
    C# 面向对象之概念理解(2)
    Linux中常用常用常用快捷键
    shell基本脚本命令
    awk命令详解及应用技巧
    Windows(64位IIS)未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
    基础知识(net)<3> virtural , new ,override
    WCF REST<2>: 消费WCF REST 服务
    智能表单(2):简单使用HtmlEditor
    智能表单(1) : 开源HtmlEditor介绍
    ASP.NET Web API <2> 跨域消费Web API(JSONP)
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879453.html
Copyright © 2020-2023  润新知