1. @interface UIView (resizeToFit)
  2.  
  3. -(void)resizeToFitSubviews;
  4. -(void)resizeHightToFitSubviews;
  5. -(void)resizeWidthToFitSubviews;
  6. @end
  7.  
  8. @implementation UIView (resizeToFit)
  9.  
  10. -(void)resizeToFitSubviews
  11. {
  12. float w = 0;
  13. float h = 0;
  14.  
  15. for (UIView *v in [self subviews]) {
  16. float fw = v.frame.origin.x + v.frame.size.width;
  17. float fh = v.frame.origin.y + v.frame.size.height;
  18. w = MAX(fw, w);
  19. h = MAX(fh, h);
  20. }
  21. [self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, w, h)];
  22. }
  23.  
  24. -(void)resizeHightToFitSubviews{
  25. float h = 0;
  26. for (UIView *v in [self subviews]) {
  27. float fh = v.frame.origin.y + v.frame.size.height;
  28. h = MAX(fh, h);
  29. }
  30. [self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, h)];
  31. }
  32.  
  33. -(void)resizeWidthToFitSubviews{
  34. float w = 0;
  35.  
  36. for (UIView *v in [self subviews]) {
  37. float fw = v.frame.origin.x + v.frame.size.width;
  38. w = MAX(fw, w);
  39. }
  40. [self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, w, self.frame.size.height)];
  41. }
  42.  
  43. @end
  1.  
  1. enter image description here
  2. Code is worth a billion words. Here is the solution:
  3. @interface UIView (UIView_Expanded)
  4. - (void)resizeToFitSubviews;
  5. @end
  6. @implementation UIView (UIView_Expanded)
  7. - (void)resizeToFitSubviews
  8. {
  9.     // 1 - calculate size
  10.     CGRect r = CGRectZero;
  11.     for (UIView *v in [self subviews])
  12.     {
  13.         r = CGRectUnion(r, v.frame);
  14.     }
  15.     // 2 - move all subviews inside
  16.     CGPoint fix = r.origin;
  17.     for (UIView *v in [self subviews])
  18.     {
  19.         v.frame = CGRectOffset(v.frame, -fix.x, -fix.y);
  20.     }
  21.     // 3 - move frame to negate the previous movement
  22.     r = CGRectOffset(r, fix.x, fix.y);
  23.     [self setFrame:r];
  24. }
  25. @end
  26.  
  27.  
  28. 版权声明:本文为博主原创文章,未经博主允许不得转载。

  29. Autoresize UIView to fit subviews的更多相关文章

      1. ios 取出subviews中指定subview
      1. for(UIView *view in subviews){ if(view.tag == 998) { //根据tag判断 } if([view isKindOfClass:[UIImageView ...

      1. UIView之常用方法
      1. UIView之常用方法 将一个视图添加为子视图,并使之在最上面显示 -(void)addSubView:(UIView *)view; 将指定子视图移动到顶部 -(void)bringSubViewT ...

      1. UIView 坐标转换
      1. 例子1 Controllerview中有一个tableView,tableViewcell上有一个button,现在需要将buttonframe转为在Controllerview中的frame ...

      1. iOS - UITableViewController
      1. 前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITableView : UIScrollView <NSCoding> @available(iOS ...

      1. MBProgressHUD进行二次封装并精简使用
      1. MBProgressHUD进行二次封装并精简使用 https://github.com/jdg/MBProgressHUD 几个效果图: 以下源码是MBProgressHUD支持最新的iOS8的版本 ...

      1. iOS7 push/pop转场动画
      1. 前言 iOS 7之后,苹果提供了自定义转场动画的API,我们可以自己去定义任意动画效果.本篇为笔者学习push.pop自定义转场效果的笔记,如何有任何不正确或者有指导意见的,请在评论中留下您的宝贵意见 ...

      1. iOS 打印出视图中全部的子视图的名称
      1. 使用递归: - (void)listSubviewsOfView:(UIView *)view { // Get the subviews of the view NSArray *subviews ...

      1. iOS:小技巧(不断更新)
      1. 记录下一些不常用技巧,以防忘记,复制用. 1.获取当前的ViewWindowframe: UIWindow * window=[[[UIApplication sharedApplication] ...

      1. iOS - UITableViewCell重用机制导致Cell内容出错的解决办法
      1. "UITableView" iOS开发中重量级的控件之一;在日常开发中我们大多数会选择自定Cell来满足自己开发中的需求, 但是有些时候Cell也是可以不自定义的(比如某一个简单的 ...

    1.  
    2. 随机推荐

        1. c++内存布局与c程序的内存布局
        1. c/c++的内存布局:堆,栈,自由存储区(与堆的区别),全局/静态存储区,常量存储区(字符串常量,const常量) http://www.cnblogs.com/QG-whz/p/5060894.ht ...

        1. BASIS系列】SAP BASIS模块-后台配置的传输
        1. 公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[BASIS系列]SAP BASIS模块-后台配 ...

        1. ABAP系列】SAP ABAP 总结常用术语简称解析
        1. 公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 总结常用术语简 ...

        1. python 转义json
        1. import re body=r''' {"id":${BXbiztripinfoID_10},"msg":"1234测试审批${__UUID}&qu ...

        1. Quartz-第一篇 认识Quartz
        1. 1.什么是Quartz Quartz是一个任务调度框架,借助Cron表达式,Quartz可以支持各种复杂的任务调度.JDK中也提供了简单的任务调度,java.util.Timer. Quartz的三大 ...

        1. Codeforces 1110C (思维+数论)
        1. 题面 传送门 分析 这种数据范围比较大的题最好的方法是先暴力打表找规律 通过打表,可以发现规律如下: 定义\(x=2^{log_2a+1}\) (注意,cf官方题解这里写错了,官方题解中定义\(x=2 ...

        1. 6、numpy——高级索引
        1. NumPy 比一般的 Python 序列提供更多的索引方式.除了之前看到的用整数和切片的索引外,数组可以由整数数组索引.布尔索引及花式索引. 1.整数数组索引 1.1 以下实例获取数组中(0,0),( ...

        1. 攻防世界--getit
        1. 测试文件:https://adworld.xctf.org.cn/media/task/attachments/8ef2f7ef55c240418f84b3c514a7a28a 准备 得知 64位文件 ...

        1. JS高级 —— 普通函数、构造函数、对象方法的调用
        1. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

        1. PHP-不涉及第三个变量交换两个变量的值
        1. 不涉及第三个变量交换两个变量的值 方法1:使用加减法 <?php $a = 1; $b = 2; $a = $a+$b; $b = $a-$b; $a = $a-$b; printf(" ...