如何使用 Swift 从 UITableViewCell 内的 NIB 调整自定义 UIView 的大小?
Posted
技术标签:
【中文标题】如何使用 Swift 从 UITableViewCell 内的 NIB 调整自定义 UIView 的大小?【英文标题】:How to resize an custom UIView from NIB inside of a UITableViewCell with Swift? 【发布时间】:2015-03-14 10:03:26 【问题描述】:我想将自定义视图加载到静态 UITableViewCell
并将视图大小调整为 UITableViewCell
的水平边界。
我实现了加载,但我坚持调整大小。也许一些天才会帮助我:)
针对这个问题,我创建了一个示例项目,可以在这里查看:GitHub Repository of project
以下是我执行的步骤:
UITableView:
创建了单视图应用
在 StoryBoard 中删除了视图并将 TableViewController
(TVC) 拖到 Storyboard 中。将其嵌入UINavigationController
。
UITableViewController
的子类。
在身份检查员处将 TVC 与 MTVC 连接起来。
在属性检查器中将UITableView
内容设置为“静态单元格”
UITableView
有两个部分,每个部分都有一行。第一部分和第一行可以忽略。第二部分和第二行是从 nib 加载 uiview 的地方。
我从 UITableViewCell
创建了一个 Outlet,将在其中加载视图。
UIView:
-
我使用
InterfaceBuilder
创建了一个自定义视图作为笔尖FirstDetailView.xib
(FDV)。
添加了一些标签和文本字段。设置建议的限制条件。
然后我从UIView
FirstDetailView.swift
创建了一个子类,在 Identity Inspector 上将它与笔尖上的 FDV 连接起来。
此时文本字段只有IBOutlet
。
加载中:
-
以下代码显示了 MTVC,其中包含将视图加载到
UITableViewCell
的代码:
导入UIKit
类 MasterTableViewController: UITableViewController
@IBOutlet weak var detailCell: UITableViewCell!
override func viewDidLoad()
super.viewDidLoad()
// loading customized tableViewCell
let nib = UINib(nibName: "FirstDetailView", bundle: nil)
let nibs = nib.instantiateWithOwner(self, options:nil)
let firstDetailView = nibs.first as? FirstDetailView
if let firstView = firstDetailView
detailCell.contentView.addSubview(firstView)
当我点击播放时。视图将被加载到UITableViewCell
。但是文本字段超出了视图范围。我该怎么做才能修复UIView
边界?
(行的垂直大小不是问题。抱歉,由于声誉太低,我无法发布图片。请参阅 github 上的示例项目)
更新或新问题 如果我在文本字段中写内容。如何访问它们或从 tableViews ViewController 获取内容?
【问题讨论】:
【参考方案1】:从 nib 加载视图并添加到单元格的 contentView,您应该对其添加约束以使其在单元格内正确定位。使用以下代码重试。
// do not translate autoresizingMask to constraints, create our own
firstView.setTranslatesAutoresizingMaskIntoConstraints(false)
detailCell.contentView.addSubview(firstView)
// pin firstView edges to its superview
let constraint1 = NSLayoutConstraint(item: firstView, attribute: .Right, relatedBy: .Equal, toItem: detailCell.contentView, attribute: .Right, multiplier: 1, constant: 0)
let constraint2 = NSLayoutConstraint(item: firstView, attribute: .Bottom, relatedBy: .Equal, toItem: detailCell.contentView, attribute: .Bottom, multiplier: 1, constant: 0)
let constraint3 = NSLayoutConstraint(item: firstView, attribute: .Left, relatedBy: .Equal, toItem: detailCell.contentView, attribute: .Left, multiplier: 1, constant: 0)
let constraint4 = NSLayoutConstraint(item: firstView, attribute: .Top, relatedBy: .Equal, toItem: detailCell.contentView, attribute: .Top, multiplier: 1, constant: 0)
detailCell.contentView.addConstraints([constraint1,constraint2,constraint3,constraint4])
【讨论】:
以上是关于如何使用 Swift 从 UITableViewCell 内的 NIB 调整自定义 UIView 的大小?的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 使用 UITableViewController 创建子菜单
UITableVIewCell 错误 Xcode 7 / Swift 2