objective-c - iOS7中 textField用autolayout发生问题
大家讲道理
大家讲道理 2017-04-17 14:39:04
[iOS讨论组]

开发iOS APP 在iOS8中textField的没问题,约束也正常,换到iOS7的模拟器结果报错
报错信息为Auto Layout still required after executing -layoutSubviews. UITextField's implementation of -layoutSubviews needs to call super.'
界面一共有两个textField,点击任意一个都会触发这个bug,导致程序崩溃.请问应该怎么解决?

另附堆栈信息
*** First throw call stack:
(
0 CoreFoundation 0x000000010cdc5495 exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010c7bb99e objc_exception_throw + 43
2 CoreFoundation 0x000000010cdc531a +[NSException raise:format:arguments:] + 106
3 Foundation 0x000000010c357f19 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 189
4 UIKit 0x000000010d0dfa3a -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 521
5 QuartzCore 0x000000010c1f7802 -[CALayer layoutSublayers] + 151
6 QuartzCore 0x000000010c1ec369 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 363
7 QuartzCore 0x000000010c1ec1ea _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
8 QuartzCore 0x000000010c15ffb8 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 252
9 QuartzCore 0x000000010c161030 _ZN2CA11Transaction6commitEv + 394
10 UIKit 0x000000010d07e024 _UIApplicationHandleEventQueue + 10914
11 CoreFoundation 0x000000010cd54d21 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION
+ 17
12 CoreFoundation 0x000000010cd545f2 __CFRunLoopDoSources0 + 242
13 CoreFoundation 0x000000010cd7046f __CFRunLoopRun + 767
14 CoreFoundation 0x000000010cd6fd83 CFRunLoopRunSpecific + 467
15 GraphicsServices 0x000000010f42df04 GSEventRunModal + 161
16 UIKit 0x000000010d07fe33 UIApplicationMain + 1010
17 YCPai 0x000000010a863aff main + 111
18 libdyld.dylib 0x000000010e37c5c9 start + 1
19 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Message from debugger: Terminated due to signal 6

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
伊谢尔伦

Auto Layout still required after executing -layoutSubviews. UITextField's implementation of -layoutSubviews needs to call super.
光看错误信息的话 你应该是

- (void)layoutSubviews {
 //    [super layoutSubviews]; 缺少这一行代码   
}
黄舟

把下面这行代码放到layoutSubviews方法最后:
[super layoutSubviews];
或者再末尾添加:
[self layoutIfNeeded];

伊谢尔伦

如果您还在通过代码使用frame进行界面布局,但是对位置计算和屏幕尺寸感到厌烦;如果您在使用AutoLayout进行界面布局,但是对其中的约束难以控制和更新,以及因为约束代码而激增您的代码量;如果您希望您的IOS6版本的应用也需要具备sizeClass的功能;那么就请使用这套布局库:

 https://github.com/youngsoft/MyLinearLayout

这套布局库是以android的线性布局,相对布局,框架布局,表格布局为蓝本。同时又具有IOS的AutoLayout的功能,和部分SIZECLASS功能,以及IOS9中的UIStackView的功能,参考了masonry的一些语法机制,但是他却可以运行在IOS5版本的应用中。使用简单方便,代码清晰,而且少。 并且附带四篇教程文档:

http://blog.csdn.net/yangtiang/article/details/46483999 线性布局
 http://blog.csdn.net/yangtiang/article/details/46795231 相对布局

http://blog.csdn.net/yangtiang/article/details/48011431 表格布局

 http://blog.csdn.net/yangtiang/article/details/46492083 框架布局

 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号