- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经很习惯使用 SnapKit,但我不确定如何解决这个问题。
这是我当前的 UI 的样子:
为了实现这一目标,我这样做:
override func viewDidLoad() {
super.viewDidLoad()
regionsPicker.snp.makeConstraints { (make) in
make.centerX.equalToSuperview()
make.height.equalToSuperview() // since we rotate (this is the width)
make.top.equalTo(regionsLabel.snp.bottom).offset(15)
make.width.equalTo(100)
}
rotationAngle = -90 * (.pi/180)
regionsPicker.transform = CGAffineTransform(rotationAngle: rotationAngle)
}
如上图所示,我试图将标签的底部与选择器 View 的顶部对齐。但是由于我正在旋转我的 View ,使高度等于 superview,它反而创建了这个巨大的空间。
我看过this answer这建议针对这种特定情况使用自动布局,或者,我也可以使用 Collection View ,但我很想知道是否有针对这种情况的 SnapKit 解决方案
感谢您的帮助。
最佳答案
问题出在Apple文档中transform描述的这一部分:https://developer.apple.com/documentation/uikit/uiview/1622459-transform
In iOS 8.0 and later, the transform property does not affect Auto Layout. Auto layout calculates a view’s alignment rectangle based on its untransformed frame. So, when you change the text of the label, your constraints are related to the untransformed frame.
因此,您将 pickerView 的高度设置为 View 的高度。然后旋转它,它就会出现,变成您想要的样子。
如果您使用调试 View 层次结构
,您会发现 pickerView 现在远远超出了其 superView 的前缘和后缘。
您还会看到 pickerView 的 bounds 的宽度和高度 - 100 x 667
(在 iPhone 8 上)-不是你所期望的。
这也会在 View 大小发生变化时出现问题(例如在设备旋转时)。
这是一个示例方法:
import UIKit
class ViewController: UIViewController {
let regionsLabel: UILabel = {
let v = UILabel()
v.backgroundColor = .red
v.text = "Testing"
return v
}()
let regionsPicker: UIPickerView = {
let v = UIPickerView()
v.backgroundColor = .green
return v
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .cyan
// add the label
view.addSubview(regionsLabel)
// center label horizontally, 10-pts from view top (safe area)
regionsLabel.snp.makeConstraints { (make) in
make.centerX.equalToSuperview()
make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(10)
}
// add the picker view
view.addSubview(regionsPicker)
// rotate the picker view
let rotationAngle: CGFloat = -90 * (.pi/180)
regionsPicker.transform = CGAffineTransform(rotationAngle: rotationAngle)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
regionsPicker.snp.remakeConstraints { (make) in
// constrain picker view center horizontally
make.centerX.equalToSuperview()
// constant of 100 - because it's rotated, set the width
make.width.equalTo(100)
// constrain the height to a constant equal to the view width
make.height.equalTo(view.bounds.width)
// constrain the centerY to the centerY of the label,
// plus one-half the label's frame height / 2
// plus a constant of 65 (half the "height" of the picker view + 15-pts spacing)
make.centerY.equalTo(regionsLabel.snp.centerY).offset(regionsLabel.frame.height / 2.0 + 65.0)
}
}
}
结果是:
关于ios - CGAffineTransform 旋转导致定义 SnapKit 值时宽度和高度之间的切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57965538/
我有下面的图表,它填充了显示器的宽度和高度。高度始终只比屏幕大一点,因此会出现滚动条以显示底部 20 像素左右。 有没有办法让 Kendo UI 显示 100%,而不是 105% 的高度? 在线示例:
这个问题在这里已经有了答案: Why doesn't height: 100% work to expand divs to the screen height? (12 个答案) 关闭 9 年前
此页面 ( http://purcraft.com/madeinla/) 有问题,我正在尝试使用 iframe 元素显示此页面的内容:( http://purcraft.com/madeinla/ho
我在一个父 div 中有 2 个子 div。 Child1 是标题,Child2 是正文。我希望将 Child 2 的高度设置为 Parent - Child1 的高度。 Child2 有内容,所以它
我正在尝试用图像填充窗口。我正在使用 CSS 来尝试解决这个问题,但我想知道是否有一种方法可以最大化图像的宽度/高度,直到所有空白区域都被填满,但又不会破坏质量。 .rel-img-co
这个问题在这里已经有了答案: How to make a div 100% height of the browser window (41 个回答) 关闭 8 年前。
这可能是一个新手问题,但是是否可以将 Sprite 图标添加到带有文本的标签中? 例如: labeltext .icon { width: 30px height: 30px;
我有 3 个 div,分别是 header、content 和 footer。页眉和页脚具有固定的高度,并且它们被设计为 float 在顶部和底部。我想要使用 jquery 自动计算中间的 con
我有一个外部 div,其指定的宽度/高度(以毫米为单位)。 (mm只是赋值,不用于渲染)。 里面有另一个 div,其实际宽度/高度(以 px 为单位)。 两个 div 可以具有不同的比例。 我想要做的
我正在为一个非常简单的画廊 webapp 进行布局排序,但是当我使用 HTML5 文档类型声明时,我的一些 div(100%)的高度会立即缩小,我不能似乎使用 CSS 将它们丰满起来。 我的 HTML
我正在为一个非常简单的画廊 webapp 进行布局排序,但是当我使用 HTML5 文档类型声明时,我的一些 div(100%)的高度会立即缩小,我不能似乎使用 CSS 将它们丰满起来。 我的 HTML
我想更改 UISearchBar。文本字段的高度和宽度。我的问题是如何更改 iphone 中 UISearchBar 中的 UiSearchbar 高度、宽度、颜色 和 Uitextfield 高度?
我想要两个宽度和高度均为 100% 的 div。我知道子 div 不会工作,因为父 div 没有特定的高度,但有没有办法解决这个问题? HTML: CSS: body
我有几个带有“priceText”类的 div,我试图实现如果 div.priceText 高度小于 100px,则隐藏 this div 中的图像。 我无法让它工作。我已成功隐藏所有 .priceT
我正在尝试从 Image 列中列出的图像中获取实际图像尺寸,并将其显示在 Image Size 列中。 我遇到的问题是,我只能获取第一张图片的大小,该图片会添加到 Image Size 列的每个单元格
我正在使用一个插件,它要求我在加载图像后获取图像的宽度和高度,而不管图像的尺寸是如何确定的。
我有一个示例 pdf(已附),它包括一个文本对象和一个高度几乎相同的矩形对象。然后我使用 itextrup 检查了 pdf 的内容,如下所示: 1 1 1 RG 1 1 1 rg 0.12 0 0 0
我是 WPF 新手。我试图解决的一个问题是如何在运行时获得正确的高度。 在我的应用程序中,我将用户控件动态添加到代码隐藏中的 Stackpanel。 Usercontrol 包含一些 Texblock
在自定义 WPF 控件中,我想将控件的宽度设置为高度的函数。例如:Width = Height/3 * x; 实现此目的的最佳方法是什么,以便控件正确且流畅地调整大小(和初始大小)? 最佳答案 您可以
好吧,我本以为这是一个简单的问题,但显然它让我感到困惑。 当我尝试设置 RibbonComboBox 的高度时,它不会移动它的实际大小,而是移动它周围的框。 这是我的 XAML:
我是一名优秀的程序员,十分优秀!