iOS 可延展视图(点击前显示部分文字,点击后显示全部)

#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 可延展视图(点击前显示部分文字,点击后显示全部)的更多相关文章
- ios 透过上层视图点击相应下方视图的点击事件
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *hitView = [super hitTest:point ...
- 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( ...
- 李洪强iOS开发之-实现点击单行View显示和隐藏Cell
李洪强iOS开发之-实现点击单行View显示和隐藏Cell 实现的效果: .... ....
- iOS开发系列--视图切换
概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController ...
- IOS开发之视图和视图控制器
视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西.在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多.在UIKit框架中都有一 ...
- Xamarin.IOS之多视图
欢迎大家加入以下开源社区 Xamarin-Cn:https://github.com/Xamarin-Cn Mvvmcross-Cn:https://github.com/Mvvmcross-Cn ...
- iOS学习之视图控制器
一.自定义视图(label-textField组合视图) 1.自定义视图:系统标准UI之外,自己组合出的新的视图. 2.优点:iOS提供了很多UI组件,借助它们我们可以实现不同的功 ...
- Swift - iOS中各种视图控制器(View Controller)的介绍
在iOS中,不同的视图控制器负责不同的功能,采用不同的风格向用户呈现信息.下面对各个视图控制器做个总结: 1,标准视图控制器 - View Controller 这个控制器只是用来呈现内容.通常会用来 ...
- iOS:UITableView表格视图控件
UITableView:表格视图控件,继承滚动视图控件UIScrollView,(类似于UIPickerView选择器,它主要通过设置数据源代理和行为代理实现协议来设置单元格) 对表格的操作主要 ...
随机推荐
- [英语学习]儿童英语 sesamestreet
最近在和我的孩子学习汉语,用在自己学习英语方面,就是多看小故事,多看儿歌. 以前孙小小分享过这个网站www.sesamestreet.org 现在找出来看看,还是很不错的. 搜索elbows and ...
- Mininet实验 基于Mininet实现BGP路径挟持攻击实验
参考:基于Mininet实现BGP路径挟持攻击实验 实验目的: 掌握如何mininet内模拟AS. 掌握BGP路径挟持的原理和分析过程. 实验原理: 互联网是由相互连接的自治系统AS组成的,通过一个通 ...
- 每天php函数 - list()给一组变量赋值
array list ( mixed $varname [, mixed $... ] ) 像 array() 一样,这不是真正的函数,而是语言结构.list()用一步操作给一组变量进行赋值. var ...
- mysql 关于日期时间的字段类型
mysql日期和时间类型 mysql有5种表示时间值的日期和时间类型,分别为.DATE,TIME,YEAR,DATETIME,TIMESTAMP. TIMESTAMP类型有专有的自动更新特性, TIM ...
- MySQL优化常用
一.mysql的配置都是小写的,使用下划线_或破折号-分割单词,两者是一样的二.在配置文件中可以用1m,1g等单位,但是用set命令,不能使用单位,默认单位是字节三.特殊例子a.query_cache ...
- coursera python 学习总结
为啥要写这篇总结?早上突然想到了四个字:知行合一.实践,总结,再实践,再总结经验,积累经验,为己所用.闲话少叙,来干货: 1.目标要单一,如果想要完成课程,还要健身,还要玩玩游戏.看看电影,还学别的课 ...
- [Android] Intent详解
[转]http://www.cnblogs.com/engine1984/p/4146621.html [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重 ...
- base64coder调用
base64coder 可以查看官网: http://www.source-code.biz/base64coder/java/ 我所涉及到的 base64coder调用: 某天,因需要修改Pr ...
- c#循环迭代匿名类链表(可迭代的匿名类)
Main(){ //为什么?object是基类啊!! //报错.不能从List<anonymous>换成List<object>. //var q=(List<objec ...
- 低功耗蓝牙BLE [学习笔记]
手机设备会区分 "connecting" and "pairing" ,前者可以自动连接,后者则需要请求.BLE不再有pairing的麻烦,能直接连上目标设备, ...