ios - 水平 UIStackView - 如何对齐里面的项目,使一个向左浮动,另一个在中心?
问题描述
我正在制作一个“首选项”屏幕,并在顶部标题的布局方面苦苦挣扎。我有一个简单的“后退”按钮和一个标签。要求是,后退按钮必须始终向左浮动,并且标签必须居中,其自身的内容居中。
到目前为止,我创建了一个包含这两个项目的堆栈视图(水平)。我已将分布指定为等间距,并添加了如下宽度约束:按钮 - 60 标签 - 200
这在一个屏幕上看起来不错,但我确信它不会起作用,因为屏幕宽度在不同的设备上以及纵向/横向之间也有所不同。
在 CSS 中,这只是将按钮指定为 float:left,标签为 margin:auto,如何在 XIB 中进行这项工作?
这是一个截图供参考:
解决方案
你有几个选择...
最简单,最接近您的 CSS 描述:
按钮从顶部被限制为 0,从前导被限制为 8(根据需要调整);标签被限制为垂直居中按钮,水平居中以查看。
缺点:如果标签获得太多文本,它将与按钮重叠。
第二种选择:
UIView
与上面相同,但在右上角添加一个“间隔” ......将其限制为 0 到顶部,8 到尾随,垂直居中到按钮,并将其限制为与按钮相等的宽度和相等的高度。然后,将>= 8
约束添加到导致按钮尾随的标签,并将标签尾随添加到间隔视图前导。这将允许标签根据其文本水平扩展,但会防止重叠(...
如果太多无法容纳,文本将被截断)。
第三个选项 - 使用堆栈视图:
堆栈视图设置:
Axis: Horizontal
Alignment: Fill
Distribution: Fill
Spacing: 8
将堆栈视图 0 约束到顶部,8 个前导和尾随(仅用于两侧的小填充),添加一个按钮、标签和UIView
. 将“spacer”视图约束为按钮的宽度。设置Content Hugging Priority = 1000
按钮的水平(将保持其标题的宽度)。
还有其他方法,部分取决于您是否要执行此处未显示的其他任何操作,但是所有这三种方法都可以完成工作。
推荐阅读
- visual-studio-code - VSCode - 如何将文件视图拆分到单独的窗口?
- linux - 使用 Linux 原始套接字捕获 PTP 数据包
- javascript - 如何使用传统处理从 jquery ajax 发送的数组:false
- c++ - 具有默认捕获类型的 c++ lambda 函数
- perl - Parallel Fork-Manager:输出中其他子进程的片段
- flutter - 在动态脚手架中显示 SnackBar 失败
- php - Laravel 5.5 \Memcache 未找到
- python - 使用 WIQL 从 Azure Devops 检索链接的工作项
- python - Docker ModuleNotFoundError:没有名为“scipy”的模块
- html - Flask静态子目录中的动态文件名加载