我用来UITableViewAutomaticDimension计算表格视图单元格的高度。这对我来说可以。但对于某些单元格,返回的高度是 44,而不是动态计算高度。但是,当向上滚动并返回到同一单元格时,高度会被完美地重新计算。所以我想我没有任何错误的约束,因为在我手动滚动并更正所有单元格高度后,之后不会显示任何约束破坏警告。
编辑
下面给出的是图像的屏幕截图(裁剪时混乱,但可以从个人资料图像中看到问题。)。第一个单元高度计算正确。但其余的都是错误的。

objective-c uitableview nslayoutconstraint ios-autolayout uitableviewautomaticdimension
我希望两个子视图之间的垂直间距约束常量值是屏幕高度的百分比。这样,设计在所有设备上看起来都差不多。
我如何在故事板中做到这一点?有什么众所周知的技巧吗?
也许有一些技巧可以通过内容优先级、压缩阻力或较低优先级的第二个约束来实现这一点?
我有一个标签,无论使用什么设备,我都希望在屏幕上具有相同的相对位置。例如,标签位于距视图顶部边距 10% 和距视图左边距 30% 的位置。
常量将始终进行定位,例如距视图边缘 150 像素,因此对于分辨率较小的设备会更大,而分辨率较大的设备只会有更小的距离......
有没有办法以编程方式实现这一点,例如在 SnapKit 的帮助下?
我的代码目前看起来像这样:
import UIKit
import SnapKit
class worldViewController: UIViewController {
lazy var correctFieldNew = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(correctFieldNew)
correctFieldNew.backgroundColor = UIColor.blueColor()
correctFieldNew.snp_makeConstraints { (make) -> Void in
make.size.equalTo(CGSizeMake(90, 30))
}
}
}
Run Code Online (Sandbox Code Playgroud)
我觉得我必须在这里使用乘数,但是当我写下类似的东西时,标签不会移动一英寸:
make.top.equalTo(self.view).multipliedBy(0.1)
Run Code Online (Sandbox Code Playgroud) 我注意到一个 Xcode 警告说:
“iOS 11.0 之前的语言方向布局边距”
甚至这个问题在Apple 开发者论坛上也没有得到解答。
我使用过故事板和警告不会导致任何特定视图。
原因是什么或有什么解决办法?
我在 UITableViewCell 中有一个 UIView ,当用户点击“更少/更多”按钮时需要更改其高度
我的代码是
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
Run Code Online (Sandbox Code Playgroud) objective-c uitableview ios ios-autolayout uitableviewautomaticdimension
我尝试实现旋转调整,因此在教程中作者在设置新首选项之前使用了 invalidatelayout 功能。但实际上所有工作都可以在没有 invalidateLayout 的情况下工作,但我之前在另一种情况下尝试过并得到相同的“无”输出。
override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
collectionView.collectionViewLayout.invalidateLayout()
let indexPath = IndexPath(item: pageControl.currentPage, section: 0)
//scroll to indexPath after the rotation is going
DispatchQueue.main.async {
self.collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
self.collectionView.reloadData()
}
}
Run Code Online (Sandbox Code Playgroud)
那么为什么我们需要 invalidateLayout 呢?(我阅读了文档,但似乎这个功能有点......它似乎什么都不做......我不知道......也许是多余的?)
是否有必要强制使用自动布局来仅使用 stackview 假设我已经制作了没有自动布局的整个项目,现在对于特定屏幕我必须使用 Stackview 来平均划分视图内的标签数量。有什么解决办法吗..
问题
实际上我必须自定义一个没有自动布局的旧项目,现在我必须只修改一个屏幕,它不需要任何约束,而只是像 uitablecell 一样的 stackview,每个单元格中有 8 个标签等分。
我知道我们可以通过计算帧运行时间来做到这一点,但是还有其他方法可以做到吗?
在我的 iOS 应用程序中,我在导航栏下方呈现了视图。这是因为导航栏是隐藏的,直到用户点击屏幕。
下面的屏幕截图说明了我的问题。
“X”按钮呈现在 iPhone X 的缺口下方,几乎看不到。这是我将按钮限制topAnchor为其superview!.topAnchor.
请注意,这适用于除 iPhone X 之外的所有设备。
此屏幕截图中的“X”按钮锚定在其上superview!.safeAreaLayoutGuide.topAnchor并呈现在导航栏下方。考虑到 Apple 的文档,这是有道理的safeAreaLayoutGuide:
“本指南反映了导航栏、标签栏、工具栏和其他祖先视图未涵盖的视图部分。”
但是,我希望“X”按钮呈现在 iPhone X 的缺口下方和导航栏下方。这是隐藏导航栏时的样子:
“X”按钮应呈现在缺口正下方。
所以我的问题是:
有没有办法从视图中排除导航栏safeAreaLayoutGuide?如果没有,除了手动偏移 iPhone X 上的按钮之外,我还有什么选择。
请注意,我正在以编程方式进行所有操作。我不再使用故事板。
谢谢!
我正在inputAccessoryView使用UIViewController. 一切正常,直到我改变UIWindows rootViewController。之后,safeAreaInsets肖像被报告为风景,反之亦然。
rootViewController仅当从具有键盘输入的位置进行更改时才会发生这种情况。
以下是重现该问题的示例项目:https ://github.com/jcavar/ChangeRootSafeArea
我想这是某种魔法UITextEffectsWindow造成的。我尝试在更改之前完全删除它rootViewController,但随后输入附件视图不再出现。
对此有什么想法吗?
ios-autolayout ×10
ios ×8
swift ×4
autolayout ×3
objective-c ×2
uitableview ×2
uitableviewautomaticdimension ×2
autoresize ×1
iphone-x ×1
margin ×1
snapkit ×1
stackview ×1
swift3 ×1
uilabel ×1