#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end
#import "AppDelegate.h"
#import "RootViewController.h"
@interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor]; self.window.rootViewController = [[RootViewController alloc] init]; [self.window makeKeyAndVisible];
return YES;
} @end
#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController

@end
#import "RootViewController.h"
#import "ExpandableView.h"
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
@interface RootViewController ()<refreshDelagate>
{
UILabel *label;
ExpandableView *expandableView;
}
@end @implementation RootViewController - (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor lightGrayColor];
expandableView = [[ExpandableView alloc] initWithFrame:CGRectMake(, , SCREEN_WIDTH, )];
expandableView.introdution.text = @"至尊宝被月光宝盒带回到五百年前,遇见紫霞仙子被对方打上烙印成为对方的人,并发觉自己已变成孙悟空。紫霞与青霞本是如来佛祖座前日月神灯的灯芯(白天是紫霞,晚上是青霞),二人虽然同一肉身却仇恨颇深,因此紫霞立下誓言,谁能拔出她手中的紫青宝剑,谁就是她的意中人。紫青宝剑被至尊宝于不经意间拔出,紫霞决定以身相许,却遭一心记挂白晶晶的至尊宝拒绝。后牛魔王救下迷失在沙漠中的紫霞,并逼紫霞与他成婚,关键时刻,至尊宝现身。";
expandableView.delegate = self;
[self.view addSubview:expandableView]; label = [[UILabel alloc] initWithFrame:CGRectMake(, CGRectGetMaxY(expandableView.frame), SCREEN_WIDTH, )];
label.backgroundColor = [UIColor redColor];
// label.alpha = 0.0;
[self.view addSubview:label];
}
/**
* 改变视图的尺寸
*/
- (void)refreshSubView{
label.frame = CGRectMake(, CGRectGetMaxY(expandableView.frame), SCREEN_WIDTH, );
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
#import <UIKit/UIKit.h>

@protocol refreshDelagate <NSObject>

- (void)refreshSubView;

@end

@interface ExpandableView : UIView

@property(nonatomic,weak) id<refreshDelagate> delegate;
@property(nonatomic, strong) UILabel *introdution; @end
#import "ExpandableView.h"
#define self_height 70
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define fontSize 12
#define top_gap 7
#define left_gap 20
#define label_buttom_gap 5
#define direction_width 20
#define direction_height 10
#define direction_buttom_gap 5
#define color [UIColor whiteColor]
#define backgroundView_height (label_buttom_gap+direction_height+direction_buttom_gap)
@interface ExpandableView () @property(nonatomic, strong)UIButton *button;
@property(nonatomic, strong)UIImageView *direction;
@property(nonatomic, strong)UIView *backgroundView; @end @implementation ExpandableView - (instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
self.backgroundColor = color;
self.userInteractionEnabled = YES;
self.clipsToBounds = YES;
self.frame = CGRectMake(frame.origin.x, frame.origin.y, SCREEN_WIDTH, self_height); self.introdution = [[UILabel alloc] init];
self.introdution.backgroundColor = [UIColor clearColor];
self.introdution.textColor = [UIColor grayColor];
self.introdution.numberOfLines = ;
self.introdution.font = [UIFont systemFontOfSize:fontSize];
[self addSubview:self.introdution]; self.backgroundView = [[UIView alloc] init];
self.backgroundView.backgroundColor = color;
[self addSubview:self.backgroundView]; self.direction = [[UIImageView alloc] init];
self.direction.image = [UIImage imageNamed:@"向下图标"];
[self addSubview:self.direction]; self.button = [UIButton buttonWithType:UIButtonTypeCustom];
self.button.backgroundColor = [UIColor clearColor];
[self.button addTarget:self action:@selector(isExpandView:) forControlEvents:UIControlEventTouchUpInside];
self.button.selected = NO; [self addSubview:self.button]; }
return self;
} - (void)layoutSubviews{
[super layoutSubviews];
CGSize size = [self computeHeightByText];
self.introdution.frame = CGRectMake(left_gap, top_gap, SCREEN_WIDTH-left_gap*, size.height/*self.frame.size.height - top_gap-label_buttom_gap-direction_height*/); self.backgroundView.frame = CGRectMake(, self.bounds.size.height -backgroundView_height, SCREEN_WIDTH, backgroundView_height); self.direction.frame = CGRectMake((SCREEN_WIDTH - direction_width)/2.0, self.bounds.size.height - direction_height-direction_buttom_gap, direction_width, direction_height); self.button.frame = self.bounds; }
/**
* 根据文字计算高度
*/
- (CGSize)computeHeightByText{
UIFont *font = [UIFont systemFontOfSize:fontSize];
CGSize contraint = CGSizeMake(SCREEN_WIDTH-left_gap*, );
CGSize size = [self.introdution.text sizeWithFont:font constrainedToSize:contraint lineBreakMode:NSLineBreakByWordWrapping];
return size;
}
/**
* 重新布局UI
*
* @param size 根据文字计算出的尺寸
*/
- (void)rebuildViewWithSize:(CGSize)size{
CGRect frame = self.frame;
float height = size.height+top_gap+label_buttom_gap+direction_height+direction_buttom_gap;
self.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, height);
self.introdution.frame = CGRectMake(left_gap, , SCREEN_WIDTH-left_gap*, );
self.button.frame = self.bounds;
}
/**
* 按钮触发的事件
*/
- (void)isExpandView:(UIButton*)sender{
self.button.selected = !self.button.selected;
if (self.button.selected) {
self.direction.image = [UIImage imageNamed:@"向下图标_down"];
CGSize size = [self computeHeightByText];
[self rebuildViewWithSize:size];
}else{
self.direction.image = [UIImage imageNamed:@"向下图标"];
CGRect frame = self.frame;
self.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, self_height);
}
[self.delegate refreshSubView];
} @end

iOS 可延展视图(点击前显示部分文字,点击后显示全部)的更多相关文章

  1. ios 透过上层视图点击相应下方视图的点击事件

    - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *hitView = [super hitTest:point ...

  2. MYSQL不能显示中文字,显示错误“ERROR 1366 (HY000): Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89'”

    或者建表时带上编码utf8 CREATE TABLE `students`( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR( ...

  3. 李洪强iOS开发之-实现点击单行View显示和隐藏Cell

    李洪强iOS开发之-实现点击单行View显示和隐藏Cell 实现的效果:  .... ....

  4. iOS开发系列--视图切换

    概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController ...

  5. IOS开发之视图和视图控制器

    视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西.在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多.在UIKit框架中都有一 ...

  6. Xamarin.IOS之多视图

    欢迎大家加入以下开源社区 Xamarin-Cn:https://github.com/Xamarin-Cn Mvvmcross-Cn:https://github.com/Mvvmcross-Cn  ...

  7. iOS学习之视图控制器

    一.自定义视图(label-textField组合视图)      1.自定义视图:系统标准UI之外,自己组合出的新的视图.      2.优点:iOS提供了很多UI组件,借助它们我们可以实现不同的功 ...

  8. Swift - iOS中各种视图控制器(View Controller)的介绍

    在iOS中,不同的视图控制器负责不同的功能,采用不同的风格向用户呈现信息.下面对各个视图控制器做个总结: 1,标准视图控制器 - View Controller 这个控制器只是用来呈现内容.通常会用来 ...

  9. iOS:UITableView表格视图控件

    UITableView:表格视图控件,继承滚动视图控件UIScrollView,(类似于UIPickerView选择器,它主要通过设置数据源代理和行为代理实现协议来设置单元格)    对表格的操作主要 ...

随机推荐

  1. “通过jumpserver远程登录linux服务器,rz上传文件速度过慢”问题的解决

    问题: windows通过jumpserver远程登录到linux服务器,使用rz上传jar包,速度太慢(10k以内). 解决方案: 思路:通过ssh直接登录远程服务器 1.secureCRT-> ...

  2. checked Exception和unchecked exception

    checked Exception: io,sql等exception,程序无法控制的 unchecked exception: 包括Error与RuntimeException及其子类,如:OutO ...

  3. win7硬盘安装ubuntu双系统——注意项

    WIN7 下硬盘安装ubuntu 12.04 博客分类: ubuntu   仅为网络上的资料整理 资料引用:http://www.ctocio.com.cn/35/12325035.shtml htt ...

  4. easy ui 问题

    easyui  的样式  和Bootstrap css   有冲突,不要一起使用 日期禁止输入 editable="false" ------------------------- ...

  5. w-BIG TABLE-view+where-small table

    w-BIG TABLE DROP PROCEDURE IF EXISTS truncate_insert_sales_rank_toparow_month; DELIMITER /w/ CREATE ...

  6. 关于Java中File的renameTo函数

    先看Java编程实战经典中的一道习题: 编写程序,程序运行时输入目录名称,并把该目录下的所有文件名后缀修改成.txt. 按照题意,我在d盘新建了文件夹test,并在该文件夹下新建了一个文件file.d ...

  7. Selenium 遇到的问题

    1. How to Resolve Stale Element Reference Exception? First of all lets be clear about what a WebElem ...

  8. 汇总10.4版本ArcGIS Server与ArcMap 安装+SDE+注册数据源(非破解)

    文档参考了Server技术支持部各位前辈的总结文档. win10 + Server 10.4 +  ArcMap 10.4 + Oracle instant client (32位 和 64位) 安装 ...

  9. 如何去掉delphi2010的欢迎界面(welcome page)

    如何去掉delphi2010的欢迎界面(welcome page)方法一: 在电脑开始菜单下,找到delphi的快捷菜单,点击该菜单的属性,在“目标”的内容中,最后添加“-np”即可.如:D:\Win ...

  10. ORACLE FormBuilder触发器执行顺序

    1.当打开FORM时: (1)PRE-FORM (2)PRE-BLOCK(BLOCK级) (3)WHEN-NEW-FORM-INSTANCE (4)WHEN-NEW-BLOCK-INSTANCE (5 ...