首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

子视图不遵循约束,取消键盘会在视图底部留下一个黑色空间

是由于视图的布局约束没有正确设置或者键盘的出现导致的。解决这个问题可以采取以下步骤:

  1. 检查约束:确保子视图的布局约束设置正确。子视图应该根据需要设置正确的宽度、高度、位置等约束,以适应不同的屏幕尺寸和方向。
  2. 自动布局:使用自动布局技术,如Auto Layout,可以根据视图的约束自动调整布局。通过正确设置约束,可以确保视图在键盘出现时自动调整位置,避免留下黑色空间。
  3. 键盘通知:监听键盘的出现和消失通知,以便在键盘出现时调整视图的布局。可以通过注册键盘通知的方式,获取键盘的高度和动画信息,然后根据需要调整子视图的位置和大小。
  4. 键盘遮挡:如果子视图被键盘遮挡住了,可以通过调整滚动视图的contentInset或者contentOffset来确保子视图可见。可以根据键盘的高度和位置计算需要调整的偏移量,然后设置给滚动视图。
  5. 腾讯云相关产品推荐:腾讯云提供了一系列云计算产品,其中与移动开发和前端开发相关的产品包括腾讯移动推送、腾讯云移动直播、腾讯云CDN等。这些产品可以帮助开发者实现移动应用的消息推送、直播功能和内容分发加速等需求。具体产品介绍和使用方法可以参考腾讯云官方文档。

总结:子视图不遵循约束,取消键盘会在视图底部留下一个黑色空间的问题可以通过正确设置布局约束、使用自动布局技术、监听键盘通知、调整滚动视图等方式来解决。腾讯云提供了一系列与移动开发和前端开发相关的产品,可以满足开发者在云计算领域的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android中的视图焦点Focus的详细介绍

    在非触摸屏设备中接收事件和处理响应的控件是具有焦点(Focused)的控件。一个窗口中一个时间内只能有一个具有焦点的控件。在早期具有滚轮设备的android系统中以及现在的智能TV电视应用中视图的焦点控制就非常重要了。而在触摸设备上通常默认情况下只有EditText控件才具有焦点,而我们通常会遇到的一个问题就是当进入一个具有EditText的界面时键盘就会自动弹出,而且有时候可能无法消失,但需求可能是进入时不弹出键盘。而这些所有的东西都是和视图的焦点有关,因此本文的重点就是介绍视图的焦点属性和方法,get到这些技术点后你就可以完全控制和使用这些特性了。

    02

    iOS的MyLayout布局系列-流式布局MyFlowLayout

    在我的CSDN博客中的几篇文章分别介绍MyLayout布局体系中的视图从一个方向依次排列的线性布局(MyLinearLayout)、视图层叠且停靠于父布局视图某个位置的框架布局(MyFrameLayout)、视图之间通过约束和依赖实现布局的相对布局(MyRelativeLayout)、以及多列多行排列的表格布局(MyTableLayout)、以及本文将要介绍的流式布局(MyFlowLayout)这5种布局体系。这些视图布局的方式都有一些统一的特征,都要求必须将子视图放入到一个特殊的视图中去,我们称这些特殊的视图为布局视图(Layout View)。这些布局视图都有一个共同的基类:基础布局视图(MyBaseLayout)。同时我们还为视图建立了很多扩展的属性来进行位置和尺寸的设置,以及我们还专门建立了服务某些布局视图的视图扩展属性。在这些扩展属性中:用于定位视图位置的类是MyLayoutPos类,这个类可以用来决定视图的上、下、左、右、水平居中、垂直居中六个方位的具体值;而用于决定视图尺寸的类是MyLayoutSize类,这个类可以用来决定视图的高度和宽度的具体值;用于决定视图排列布局方向的是枚举MyLayoutViewOrientation类型,方位类型定义了垂直和水平两个方位;用于决定视图停靠区域的MyGravity枚举类型,枚举类型定义了14种停靠的区域类型,这里要分清楚的是MyGravity和MyLayoutPos的区别,前者是用来描述某个具体的方位,而后者则是用来某个方位的具体位置;用于描述子视图和布局视图四周内边距的padding属性,这个属性只用于布局视图;用于描述布局视图的尺寸大小由子视图整体包裹的wrapContentWidth,wrapContentHeight的属性;用于描述苹果各种屏幕尺寸适配的MySizeClass定义,以及具体的实现类MyLayoutSizeClass类。这些属性和类共同构建了出了一套完整的iOS界面布局系统。下面是这个套界面布局体系的类结构图:

    03

    intellij idea常用快捷键

    Ctrl 快捷键 介绍 Ctrl + F 在当前文件进行文本查找 (必备) Ctrl + R 在当前文件进行文本替换 (必备) Ctrl + Z 撤销 (必备) Ctrl + Y 删除光标所在行 或 删除选中的行 (必备) Ctrl + X 剪切光标所在行 或 剪切选择内容 Ctrl + C 复制光标所在行 或 复制选择内容 Ctrl + D 复制光标所在行 或 复制选择内容,并把复制内容插入光标位置下面 (必备) Ctrl + W 递进式选择代码块。可选中光标所在的单词或段落,连续按会在原有选中的基础上再扩展选中范围 (必备) Ctrl + E 显示最近打开的文件记录列表 (必备) Ctrl + N 根据输入的 类名 查找类文件 (必备) Ctrl + G 在当前文件跳转到指定行处 Ctrl + J 插入自定义动态代码模板 (必备) Ctrl + P 方法参数提示显示 (必备) Ctrl + Q 光标所在的变量 / 类名 / 方法名等上面(也可以在提示补充的时候按),显示文档内容 Ctrl + U 前往当前光标所在的方法的父类的方法 / 接口定义 (必备) Ctrl + B 进入光标所在的方法/变量的接口或是定义处,等效于 Ctrl + 左键单击 (必备) Ctrl + K 版本控制提交项目,需要此项目有加入到版本控制才可用 Ctrl + T 版本控制更新项目,需要此项目有加入到版本控制才可用 Ctrl + H 显示当前类的层次结构 Ctrl + O 选择可重写的方法 Ctrl + I 选择可继承的方法 Ctrl + + 展开代码 Ctrl + - 折叠代码 Ctrl + / 注释光标所在行代码,会根据当前不同文件类型使用不同的注释符号 (必备) Ctrl + [ 移动光标到当前所在代码的花括号开始位置 Ctrl + ] 移动光标到当前所在代码的花括号结束位置 Ctrl + F1 在光标所在的错误代码处显示错误信息 (必备) Ctrl + F3 调转到所选中的词的下一个引用位置 (必备) Ctrl + F4 关闭当前编辑文件 Ctrl + F8 在 Debug 模式下,设置光标当前行为断点,如果当前已经是断点则去掉断点 Ctrl + F9 执行 Make Project 操作 Ctrl + F11 选中文件 / 文件夹,使用助记符设定 / 取消书签 (必备) Ctrl + F12 弹出当前文件结构层,可以在弹出的层上直接输入,进行筛选 Ctrl + Tab 编辑窗口切换,如果在切换的过程又加按上delete,则是关闭对应选中的窗口 Ctrl + End 跳到文件尾 Ctrl + Home 跳到文件头 Ctrl + Space 基础代码补全,默认在 Windows 系统上被输入法占用,需要进行修改,建议修改为 Ctrl + 逗号 (必备) Ctrl + Delete 删除光标后面的单词或是中文句 (必备) Ctrl + BackSpace 删除光标前面的单词或是中文句 (必备) Ctrl + 1,2,3…9 定位到对应数值的书签位置 (必备) Ctrl + 左键单击 在打开的文件标题上,弹出该文件路径 (必备) Ctrl + 光标定位 按 Ctrl 不要松开,会显示光标所在的类信息摘要 Ctrl + 左方向键 光标跳转到当前单词 / 中文句的左侧开头位置 (必备) Ctrl + 右方向键 光标跳转到当前单词 / 中文句的右侧开头位置 (必备) Ctrl + 前方向键 等效于鼠标滚轮向前效果 (必备) Ctrl + 后方向键 等效于鼠标滚轮向后效果 (必备) Alt 快捷键 介绍 Alt + `|显示版本控制常用操作菜单弹出层 (必备) Alt + Q 弹出一个提示,显示当前类的声明 / 上下文信息 Alt + F1 显示当前文件选择目标弹出层,弹出层中有很多目标可以进行选择 (必备) Alt + F2 对于前面页面,显示各类浏览器打开目标选择弹出层 Alt + F3 选中文本,逐个往下查找相同文本,并高亮显示 Alt + F7 查找光标所在的方法 / 变量 / 类被调用的地方 Alt + F8 在 Debug 的状态下,选中对象,弹出可输入计算表达式调试框,查看该输入内容的调试结果 Alt + Home 定位 / 显示到当前文件的 Navigation Bar Alt + Enter IntelliJ IDEA 根据光标所在问题,提供快速修复选择,光标放在的位置不同提示的结果也不同 (必备) Alt + Insert 代码自动生成,如生成对象的 set / get 方法,构造函数,toString() 等 (必备) Alt + 左方向键 切换当前已打开的窗口中的子视图,比如Debug窗口中有Output

    02

    MyLayout和XIB或SB的混合使用方法

    MyLayout是一个可以非常简单和方便的实现各种界面布局的第三方开源库。在我的github项目中大部分DEMO都是通过代码来实现界面布局的,但这并不是表示MyLayout不支持XIB和SB。 在构建一个应用的MVC框架中,我们希望模型、视图、控制这三部分都尽可能的低耦合,而苹果推荐的视图部分构建则是通过XIB或者SB来完成的。因为MyLayout中的各种布局视图类其实都是从UIView派生的,因此MyLayout是完全可以和XIB以及SB混合使用的。 MyLayout的一些布局视图属性以及子视图的扩展布局属性是可以在XIB或者SB界面编辑器里面进行设置的。唯一的一个缺点是这些属性的设置不能起到所见即所得的效果。 因为MyLayout是一个独立而完整的界面布局框架,因此您可以和系统默认的AutoLayout混合使用,也可以完全独立的单独使用。

    04

    深入详解iOS适配技术

    iPhone自诞生以来,随着其屏幕尺寸不断的多样化,屏幕适配的技术一直在发展更新。目前,iOS系统版本已经更新到9.3,XCode的最新版本已经是7.3,仅iPhone历史产品的尺寸就已经有4种:3.5英寸、4.0英寸、4.7英寸、5.5英寸。最近,iPhone家族又诞生一款iPhoneSE,鉴于这款iPhoneSE的屏幕尺寸和iPhone5S的尺寸一模一样——同样是4.0英寸,广大iOS开发者可算是松了口气,不然iOS的屏幕尺寸真的是越来越让人眼花缭乱。 按照时间顺序,屏幕适配是这样发展的:纯代码计算frame-> autoresizing(早期进行UI布局的技术,仅适用于约束父子控件之间的关系)->AutoLayout(iOS6/2012年、iPhone5被引入,比autoresizing更加高级,旨在替代autoresizing,可以设置任何控件之间的关系)->sizeClass(iOS8出现,用于解决越来越多的屏幕尺寸的适配问题)。 在iPhone3gs时代,手机的屏幕尺寸有且只有一种,也就是3.5英寸。开发app的时候,根本不用考虑同一个视图在不同尺寸的屏幕上显示的问题。iOS开发者完全可以用纯代码的方式把一个控件的frame写死。 后来apple公司推出了4.0英寸的iPhone5和iPhone5S,所以,针对于不同尺寸的屏幕,再把控件的frame写死就不可取了。(其实也不是不可取,很多iOS开发者做屏幕适配的时候不是用的autoresizing或autolayout,而是以代码的方式动态获取屏幕的尺寸,然后根据屏幕的尺寸来写死子控件的frame。使用这种方式你会在代码中无辜增加很多if...else... 的条件判断语句。另一种方式是获取到屏幕的尺寸后,按照控件和屏幕的比例来设置控件的frame,其本质上也是写死frame。所以这两种方式都不可取,毕竟将来会回出现越来越多的屏幕尺寸。从开发的角度,重复繁琐的代码会牵绊住开发者的进度;从程序设计角度,这样的设计思路不够高级,且日后不易于拓展和维护。)

    07

    iOS的MyLayout布局体系--浮动布局MyFloatLayout

    在MyLayout的6大布局中,每种布局都有不同的应用场景。且每种布局的子视图的约束机制不一样:线性布局MyLinearLayout、表格布局MyTableLayout、流式布局MyFlowLayout、浮动布局MyFloatLayout这四种布局的子视图之间的约束是通过添加到父布局的先后顺序来决定的;框架布局MyFrameLayout中的子视图则只跟父布局视图有关,而跟添加的先后顺序无关;相对布局中MyRelativeLayout的子视图则是通过设置视图之间的依赖关系来建立约束的,而跟添加的先后顺序无关。即便如此,同一种界面功能在一些情况下都可以用任何一种布局来实现。在这些布局中相对布局因为是通过设定视图之间的依赖来建立一种布局约束,因此我们可以用他来构造一些复杂且无规律的界面布局,但其缺点则是太过于依赖约束,导致当界面调整时需要重新设定视图之间的依赖关系(iOS的AutoLayout其实就是一种相对布局的实现,布局时需要设置太多的约束,这也是我一直诟病AutoLayout的原因)。那么是否可以有一种方法不设置视图之间的依赖而来实现一些复杂的界面布局呢? 这也就是我们推出浮动布局MyFloatLayout的原因。

    03

    iOS界面布局的核心以及TangramKit介绍

    TangramKit是iOS系统下用Swift编写的第三方界面布局框架。他集成了iOS的AutoLayout和SizeClass以及Android的五大容器布局体系以及HTML/CSS中的float和flex-box的布局功能和思想,目的是为iOS开发人员提供一套功能强大、多屏幕灵活适配、简单易用的UI布局解决方案。Tangram的中文即七巧板的意思,取名的寓意表明这个布局库可以非常灵巧和简单的解决各种复杂界面布局问题。他的同胞框架:MyLayout是一套用objective-C实现的界面布局框架。二者的主体思想相同,实现原理则是通过扩展UIView的属性,以及重载layoutSubviews方法来完成界面布局,只不过在一些语法和属性设置上略有一些差异。可以这么说TangramKit是MyLayout布局库的一个升级版本。大家可以通过访问下面的github站点去下载最新的版本:

    03
    领券