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选择器,它主要通过设置数据源代理和行为代理实现协议来设置单元格) 对表格的操作主要 ...
随机推荐
- Web 在线文件管理器学习笔记与总结(10)查看文件夹中的内容
① 读取文件夹大小 a. 封装计算文件夹大小的函数 b. 打开文件夹 c. 循环判断文件夹下的内容是文件还是文件夹,如果是文件,则累积相加文件的大小:如果是文件夹,则递归调用该函数 注意两个问题: ...
- mysql 导入导出.sql文件
备份数据库(包含全部表和全部存储过程):C:\Documents and Settings\Administrator>mysqldump -h localhost -u root -p -R ...
- [SHELL进阶] (转)最牛B的 Linux Shell 命令 (二)
1.用你最喜欢的编辑器来敲命令 command <CTRL-x CTRL-e> 在已经敲完的命令后按 <CTRL-x CTRL-e> ,会打开一个你指定的编辑器(比如vim,通 ...
- Yii源码阅读笔记(二十)
View中应用布局和缓存内容部分: /** * Begins recording a block. * This method is a shortcut to beginning [[Block]] ...
- lvs简单配置
负载均衡服务器将会用到两块网卡,eth0为公网地址(此处将局域网ip作为公网地址),IP地址为192.168.1.104,eth0:1,IP地址为192.168.2.1在负载均衡器上添加一个ip别名, ...
- 如何删除docker images/containers
docker images往往不知不觉就占满了硬盘空间,为了清理冗余的image,可采用以下方法: 1.进入root权限 sudo su 2.停止所有的container,这样才能够删除其中的imag ...
- 8.PHP内核探索:再次探讨SAPI
在PHP的生命周期的各个阶段,一些与服务相关的操作都是通过SAPI接口实现. 这些内置实现的物理位置在PHP源码的SAPI目录.这个目录存放了PHP对各个服务器抽象层的代码, 例如命令行程序的实现,A ...
- 迷宫dfs
#include<stdio.h>int mov1[4]={0,0,1,-1};int mov2[4]={1,-1,0,0};int map[5][5]={0,1,0,0,1, ...
- [转]GPS纠偏算法,适用于google,高德体系的地图
此文是转的,算法没验证过,只是记录一下. GPS纠偏算法,适用于google,高德体系的地图,精确度还比较高.我试了一下比高德本身的纠偏还精确点. /** * gps纠偏算法,适用于google,高德 ...
- 初学MyBatis.net
1.MyBatis.net介绍 MyBatis..net是一个简单,但是完整的ORM框架,它使你的实体对象与sql语句或者存储过程之间的映射变得很简单,并提供数据访问.包括两个主要框架 DataAcc ...