#import "EXFifthViewController.h"

@interface EXFifthViewController ()
@end @implementation EXFifthViewController @synthesize scrollView;
@synthesize textView; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
} return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[scrollView setContentInset:UIEdgeInsetsMake(0, 0, 800, 0)];
[self resizeTextView];
} - (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} - (void)resizeTextView
{
CGRect frame = textView.frame;
frame.size.height = textView.contentSize.height;
[textView setFrame:frame];
} - (IBAction)buttonTest:(id)sender
{
[self resizeTextView];
} @end
 

正则,RegexKitLite是用的最多的,DP4用不了考虑降级到4.3||尝试修复,修好发pull request||向作者提feature request试试看,虽然此框架两年没更新了。
还有内建的正则实现,我来一段检查字符串是否是合法的中国手机号的正则匹配:

- (BOOL)isValidChinesePhoneNumber
{
NSString *Regex =@"(13[0-9]|14[57]|15[012356789]|18[02356789])\\d{8}";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", Regex];
return [predicate evaluateWithObject:self];
}

2、

_textView 后来我改成 textView 了,和 @property 对应好的。

重构改名两个都会被改(xcode的bug)
同样的问题存在于:

//重构一个方法,另一个也会跟着改名,xcode的bug
- (void)test;
+ (void)test;

3、
我修改过的类如下,看下是否满足需求:
.h

#import <UIKit/UIKit.h>

@interface TestViewController : UIViewController<UITextViewDelegate>

@end

.m:

#import "TestViewController.h"

@interface TestViewController ()

@property (strong, nonatomic) UIScrollView *scrollView;
@property (strong, nonatomic) UITextView *textView; @end @implementation TestViewController @synthesize scrollView = _scrollView, textView = _textView; - (void)viewDidLoad
{
[super viewDidLoad]; // Do any additional setup after loading the view. self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)];
self.scrollView.backgroundColor = [UIColor greenColor];
self.scrollView.contentInset = UIEdgeInsetsMake(1, 0, 0, 0);
self.textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)];
self.textView.scrollEnabled = NO;
self.textView.delegate = self; [self.scrollView addSubview:self.textView];
[self.view addSubview:self.scrollView]; [self resizeTextView];
} - (void)resizeTextView
{
CGRect frame = self.textView.frame;
frame.size.height = self.textView.contentSize.height;
[self.textView setFrame:frame];
[self.scrollView setContentSize:frame.size];
if (frame.size.height > self.scrollView.frame.size.height)
{
[self.scrollView setContentOffset:CGPointMake(0, frame.size.height - self.scrollView.frame.size.height) animated:YES];
}
} - (void)textViewDidChange:(UITextView *)textView
{
[self resizeTextView];
} @end

UITextView中也有一个UIScrollView,和你的背景UIScrollView是重合的,你的滚动动作会出发两个UIScrollView。
所以,如果你不需要编辑这些文字,建议你用UILabel作为文本容器,然后用sizeToFit来控制高度。

https://github.com/gaosboy/Kache/

这个Demo中是一个内容动态改变的UILabel,高度自适应,放在一个UIScrollView中可以滚动。可以参考

代码放在 .m 文件的 didload 函数里面。貌似 didload 函数被执行的时候 UITextView 并没有被载入,可能是因为其在 UIScrollView 内的关系。所以这段代码如果要起到效果,就必须不能用 Storyboard 来添加 UITextView,必须手工用代码 addSubView,然后在其后面添加这段代码;或者用按键事件触发(仅作测试)。

接下来碰到了超奇怪的问题。UITextView 的确高度自动适应了,但是仅仅在刚开始(用按键时间触发后)是正常的,但是只要滚动 UIScrollView,UITextView 就会立即变回原先的高度。还有一个奇怪的问题就是 UITextView 高度自动适应时,内部的内容会被向上移动一段距离,就是说顶部有几行会看不见掉,但是整体高度的确是增加了,也可以看到结尾的文本了。

#import <UIKit/UIKit.h>

@interface EXFifthViewController : UIViewController
{
} - (IBAction)buttonTest:(id)sender; @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UITextView *textView; - (void)resizeTextView; @end

IOS问题的更多相关文章

  1. iOS可视化动态绘制连通图

    上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...

  2. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  3. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  4. iOS总结_UI层自我复习总结

    UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...

  5. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  6. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  7. 告别被拒,如何提升iOS审核通过率(上篇)

    iOS审核一直是每款移动产品上架苹果商店时面对的一座大山,每次提审都像是一次漫长而又悲壮的旅行,经常被苹果拒之门外,无比煎熬.那么问题来了,我们有没有什么办法准确把握苹果审核准则,从而提升审核的通过率 ...

  8. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  9. Summary of Critical and Exploitable iOS Vulnerabilities in 2016

    Summary of Critical and Exploitable iOS Vulnerabilities in 2016 Author:Min (Spark) Zheng, Cererdlong ...

  10. 黑云压城城欲摧 - 2016年iOS公开可利用漏洞总结

    黑云压城城欲摧 - 2016年iOS公开可利用漏洞总结 作者:蒸米,耀刺,黑雪 @ Team OverSky 0x00 序 iOS的安全性远比大家的想象中脆弱,除了没有公开的漏洞以外,还有很多已经公开 ...

随机推荐

  1. MYSQL进阶学习笔记九:MySQL事务的应用!(视频序号:进阶_21-22)

    知识点十:MySQL 事务的应用 (21-22) 为什么要引入事务: 为什么要引入事务这个技术呢?现在的很多软件都是多用户,多程序,多线程的.对同一表可能同时有很多人在用,为保持数据的一致性,所以提出 ...

  2. poj 2771 Guardian of Decency 解题报告

    题目链接:http://poj.org/problem?id=2771 题目意思:有一个保守的老师要带他的学生来一次短途旅行,但是他又害怕有些人会变成情侣关系,于是就想出了一个方法: 1.身高差距   ...

  3. fuse的mount机制-流程及参数

    在bbfs中,传递的参数有两个目录,fuse将一个目录挂载在另一个目录下. 在ssfs中,传递的参数只有一个目录(传递两个目录fuse会出错). 问题:那么fuse的mount机制到底需要几个目录参数 ...

  4. python中为什么需要使用“if __name__ == '__main__'”语句

    首先用最简洁的语言来说明一下 if __name__ == '__main__': 的作用:防止在被其他文件导入时显示多余的程序主体部分. 先举个例子,如果不用 if __name__ == '__m ...

  5. PHP自动发送邮件

    目录 1. PHPMailer 2. 集成ThinkPHP 2.1 类库重命名 2.2 配置SMTP服务器 2.3 使用 1. PHPMailer 在自己项目引入核心类库文件 require_once ...

  6. JAVA GUI THREAD---***

    针对用户界面的多线程 GUI下面的多线程方式 1.与GUI类分离方式 分离方式,在创建线程类实例时需要代入GUI句柄,通过GUI句柄操作GUI,也就是说线程类和GUI类都要有对方的实例,以便相互操作. ...

  7. 深入理解js里面的this

    闲聊两句(可以忽略): 毕业有半年了,时间还过得真快,不过还好,感觉自己相对于刚毕业那会确实成长了很多:好久没有打游戏了(自己决心要戒掉的),消磨时光的时候就看看电影或者追追电视剧,再无聊就洗洗衣服. ...

  8. 附加类型“UniversalReviewSystem.Models.ApplicationUser”的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值

    在使用asp.net Identity2 的 UserManager RoleManager 时,同时还有其他仓储类型接口,能实现用户扩展信息的修改,用户注册没有问题.当修改用户信息时,出现了如下异常 ...

  9. Ruby 类的创建

    class Language  def initialize(name, creator) @name = name @creator = creator end def description pu ...

  10. Gym 100962G Green Day (找规律)

    题意:你用k 个生成树构成一个完全图. 析:n 个点的完全图有n(n-1)/2个边,一个生成树有n-1个边,你有k 个生成树 即边数等于 K(n-1) ,即  n(n-1)/2 == k(n-1)   ...