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
    


    
    
    
        
            

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

  • 相关阅读:
    三种方式重启NGINX 简单
    转MongoDB、HandlerSocket和MySQL性能测试及其结果分析 简单
    php ini_set post_max_size,upload_max_filesize 简单
    grep 命令 简单
    ANSI,GBK,UTF8,UTF16LE,UTF16BE 简单
    提升工作效率软件 简单
    会议记录 简单
    第一章 :zabbix监控
    第七章 :分布式监控与SNMP监控
    linux系统安装SNMP(可用)
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879452.html
Copyright © 2011-2022 走看看