我完全在代码中创建我的UI,并使用Masonry将单元格的内容视图的子视图约束到适当的高度.我正在使用
[cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height
Run Code Online (Sandbox Code Playgroud)
在iOS 7上的行高,而iOS 8自动处理它.
所有东西看起来都应该在屏幕上显示,但是在控制台中我得到了大量的警告,用于冲突的约束,这些都似乎是由于单元内容视图上的未经处理和不必要的高度约束(例如<NSLayoutConstraint UITableViewCellContentView.height == 44>).
在iOS 8上,我将表视图设置rowHeight为UITableViewAutomaticDimension(有效-1),但我仍然得到这个约束.我只在内容视图和它自己的子视图之间添加约束,因此内容视图和单元格本身之间没有约束.
知道这个约束来自哪里以及如何让它消失?
编辑:现在我实际上找到了各种各样的"解决方案" - 最初将内容视图的框架设置为荒谬的东西,比如CGRectMake(0, 0, 99999, 99999),在添加子视图或约束之前,似乎会使警告消失.但这并不是正确的方式,所以有人能说出更好的方法吗?
如何以编程方式添加自动布局约束以使剩余空间中的视图居中(请参见下面的示例图片)?

目前,我在底部添加了一个容器视图,然后我将视图置于容器视图中心,但我想知道是否有其他解决方案而不需要使用容器视图.
我想用一个显示图像的Custom TableViewCell实现一个TableView.
为了简单起见,我简单地使用autolayout将UIImageView放在tableviewcell中(如下图所示).

我想要的是在UIImageView中显示图像,但是那些图像尺寸可以是任何东西并且是不一致的(肖像,风景,方形)......
因此,我希望显示具有固定宽度(设备宽度)的图像和相对于图像比例的动态高度.我想要这样的东西:

遗憾的是,我无法达到这一结果.
以下是我实现它的方式 - (我使用Haneke从URL加载图像 - 存储在Amazon S3中的图像):
class TestCellVC: UITableViewCell {
@IBOutlet weak var selfieImageView: UIImageView!
@IBOutlet weak var heightConstraint: NSLayoutConstraint!
func loadItem(#selfie: Selfie) {
let selfieImageURL:NSURL = NSURL(string: selfie.show_selfie_pic())!
self.selfieImageView.hnk_setImageFromURL(selfieImageURL, placeholder: nil, format: HNKFormat<UIImage>(name: "original"), failure: {error -> Void in println(error)
}, success: { (image) -> Void in
// Screen Width
var screen_width = UIScreen.mainScreen().bounds.width
// Ratio Width / Height
var ratio = image.size.height / image.size.width
// Calculated Height for the picture
let newHeight …Run Code Online (Sandbox Code Playgroud) 我有一个UITableViewController使用Xcode 8和Swift 3正确调整单元格大小的位置.现在我正在使用Xcode 9和Swift 4,它们不会扩展,只使用默认高度44.
(我每个人都有一两句话UITableViewCell)
我以前用过这个:
// MARK: - Table view delegate
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
Run Code Online (Sandbox Code Playgroud)
...但是能够对其进行评论,因为根据iOS 11更新你的应用程序说默认会自动调整大小:
我已经尝试过将部署目标更改为iOS 11,在Storyboard中玩游戏(但我使用的是Table View Cell样式Basic,所以没有太多AutoLayout要做),我无法弄清楚是什么正在进行.
我将UILabel标题设置为0行,并且具有换行字换行,但仍然没有得到任何接近于根据Xcode 9中的文本内容扩展单元格.任何想法?
谢谢!
编辑:
这是固定的选项(我没有),因为它是一个基本单元格:
我想使用Apples可视化格式语言将视图约束到iOS 11中的新安全区域布局指南.但是,我得到一个例外:
- [NSLayoutYAxisAnchor nsli_superitem]:无法识别的选择器发送到实例0x1c447ed40
//Make View Dictionary
var views: [String: Any] = ["left": self.leftContainer]
//Check swift version and add appropriate piece to the view dictionary
if #available(iOS 11, *) {
views["topGuide"] = self.view.safeAreaLayoutGuide.topAnchor
}else{
views["topGuide"] = self.topLayoutGuide
}
//Make the constraint using visual format language
let leftVertical = NSLayoutConstraint.constraints(withVisualFormat: "V:[topGuide][left]|", options: [], metrics: nil, views: views)
//Add the new constraint
self.view.addConstraints(vertical)
Run Code Online (Sandbox Code Playgroud)
我喜欢可视化格式语言的原因是因为在某些情况下你可以用更少的代码添加很多约束.
有任何想法吗?
autolayout visual-format-language swift ios11 safearealayoutguide
我在UITableView上遇到了一个非常奇怪的问题.我有一些不同的单元格,我想在类似新闻源的表视图上显示.
我重用后我的细胞有问题.单元格包含两个图像,两个标签和一个带共享/喜欢/注释按钮的视图.我会尝试绘制它,但我不确定它会漂亮:
-------------------------------------------------
| | __ ____________________________ |
| | |_2| | | |
| | | 3 | |
| | | | |
| 1 | |____________________________| |
| | |
| |_______________________________________|
| | |
| | 4 |
|_______|_______________________________________|
| |
| 5 |
|_______________________________________________|
1 : objectImage
2 : subjectImage
3 : titleLabel
4 : commentLabel
5 : actionsView
Run Code Online (Sandbox Code Playgroud)
我的约束是:
"H:|-0-[objectImage(60)]-7-[subjectImage(30)]-7-[titleLabel]-7-|"
"H:|-0-[objectImage(60)]-0-[commentLabel]-0-|"
"H:|-0-[actionsView]-0-|"
"V:|-0-[objectImage(>=35)]-0-[actionsView(44)]-0-|"
"V:|-7-[subjectImage(30)]"
"V:|-7-[titleLabel(>=46)]-7-[commentLabel(>=35)]-0-[actionsView(44)]-0-|"
Run Code Online (Sandbox Code Playgroud)
每次绘制单元格时,我都会更改此约束:
"V:[commentLabel(%0.2f)]"
Run Code Online (Sandbox Code Playgroud)
细胞第一次完美展示.
但是,我遇到的问题是,在某些时候,经过一些重用(我不能每次都重现它),应用程序因为一个约束问题而崩溃.这是一个例外:
"<NSLayoutConstraint:0x205a75b0 V:[UILabel:0x1ef31430(105)]>",
"<NSLayoutConstraint:0x1ef34440 V:[UILabel:0x1ef31430]-(0)-[UIView:0x1ef2fe50]>",
"<NSLayoutConstraint:0x1ef34380 …Run Code Online (Sandbox Code Playgroud) 在ios应用程序中,我有一个自定义的UITableViewCell,里面有很多视图.我正在使用自动布局并根据需要设置所有约束.
但现在我需要有一个主视图(在内容视图中)并将所有其他视图放入其中(某种父视图).
这是我的单元格在界面构建器中的外观示例:

它具有使用约束设置的所有视图.
我知道有一个xcode功能可以在父视图中嵌入选定的视图:

所以我选择所有视图并选择将它们嵌入到视图中.我得到以下内容:

我的问题
尽管视图已在superview中正确嵌入,但自动布局约束已被删除,现在我必须重新创建它们.
有没有办法可以将所有视图放在superview中并具有相同的自动布局约束,而无需重新创建它们?谢谢
也许争取一个"无警告"项目是徒劳的,但我对自适应布局/自动布局很紧张,我不得不尝试并压制这些警告.
我有一个uiview,我希望根据纵向屏幕宽度动态调整大小.我的应用程序设置在通用的构建信息,仅限肖像(和颠倒).我通过以下方式限制了uiview:
有关详细信息,请参阅下面的截图.
所以现在我得到关于视图"框架在运行时不同"的警告,特别是运行时的大小和位置与画布中的大小和位置.不确定为什么Xcode"关心"类的大小设置为任何高度和任何宽度的画布.我认为自适应布局的重点在于根据设备屏幕尺寸和方向在运行时解析尺寸和位置.
如果我崩溃并让Xcode"更新帧"......是的,警告消失了,但是对于超大视图,几乎不可能以所见即所得的方式在小画布上以图形方式工作.这里解决警告的任何解决方案都没有创建超大视图,这使得在画布内工作几乎不可能?
我的应用程序创建了一个UITableViewController,它包含一个可能具有任意高度的自定义tableHeaderView.我一直在努力设置动态设置此标头,因为似乎建议的方法是缩短此标头.我的UITableViewController的相关代码:
import UIKit
import SafariServices
class RedditPostViewController: UITableViewController, NetworkCommunication, SubViewLaunchLinkManager {
//MARK: UITableViewDataSource
var post: PostData?
var tree: CommentTree?
weak var session: Session! = Session.sharedInstance
override func viewDidLoad() {
super.viewDidLoad()
// Get post info from api
guard let postData = post else { return }
//Configure comment table
self.tableView.registerClass(RedditPostCommentTableViewCell.self, forCellReuseIdentifier: "CommentCell")
let tableHeader = PostView(withPost: postData, inViewController: self)
let size = tableHeader.systemLayoutSizeFittingSize(UILayoutFittingExpandedSize)
let height = size.height
let width = size.width
tableHeader.frame = CGRectMake(0, 0, width, height)
self.tableView.tableHeaderView = tableHeader
session.getRedditPost(postData) …Run Code Online (Sandbox Code Playgroud) 我需要根据文本字段的内容增加文本字段的宽度.当用户输入文本时,文本字段大小应自动增加.我在这个文本字段旁边有一个关闭(X)按钮.
我已经约束了文本字段和按钮,以便文本字段在屏幕上居中,并且按钮与它相邻.(文本字段应该是可编辑的,按钮应该是可点击的)
文本字段大小是这样的:
当我在其中输入文本时,大小应自动增加:
我怎样才能做到这一点?
autolayout ×10
ios ×9
swift ×5
uitableview ×4
iphone ×2
xcode ×2
ios11 ×1
uiimageview ×1
uitextfield ×1
uiview ×1