ios - 如何使用 Swift 从 UITableViewCell 中的 NIB 调整自定义 UIView 的大小?

标签 ios uitableview swift uiview nib

我想将自定义 View 加载到静态 UITableViewCell 并将 View 的大小调整为 UITableViewCell 的水平边界。

我实现了加载,但我坚持调整大小。也许一些天才会帮助我 :)

针对这个问题,我创建了一个示例项目,可以在这里查看:GitHub Repository of project

以下是我执行的步骤:

UITableView:

  1. 创建了一个单 View 应用

  2. 在 StoryBoard 中删除了 View 并将 TableViewController (TVC) 拖到 Storyboard。将其嵌入到 UINavigationController 中。

  3. 创建了一个类“MasterTableViewController”(MTVC) 作为 UITableViewController 的子类。
  4. 在身份检查员处将 TVC 与 MTVC 连接起来。
  5. 在属性检查器中将 UITableView 内容设置为“静态单元格”
  6. UITableView 有两个部分,每个部分各占一行。第一部分和第一行可以忽略。第二部分和行是从 nib 加载 uiview 的地方。
  7. 我从将加载 View 的 UITableViewCell 创建了一个 Outlet。

UIView:

  1. 我使用 InterfaceBuilder 创建了一个自定义 View 作为 nib FirstDetailView.xib(FDV)。
  2. 添加了一些标签和文本字段。设置建议的约束条件。
  3. 然后我从 UIView FirstDetailView.swift 创建了一个子类,在 Identity Inspector 中将它与 Nib 处的 FDV 连接起来。 此时只有 IBOutlet 用于 TextFields。

正在加载:

  1. 以下代码显示了 MTVC 以及将 View 加载到 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)
    }
}

当我点击播放时。 View 将加载到 UITableViewCell。但是文本字段超出了 View 边界。我需要做什么来修复 UIView 边界? (行的垂直大小不是问题。抱歉,由于声誉不高,我无法发布图片。请参阅 github 上的示例项目)

更新或新问题 如果我在文本字段中写入内容。我如何访问它们或从 tableViews ViewController 获取内容?

最佳答案

View 从 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])

关于ios - 如何使用 Swift 从 UITableViewCell 中的 NIB 调整自定义 UIView 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29047679/

相关文章:

ios - 如何在 Swift 中创建一个 UILabel 数组

ios - 应用程序在执行表委托(delegate)方法时崩溃

ios - 我的 UITableView 中的自定义标题 View 在底部绘制了额外的线

ios - 如何在 UIView 中缩放 CGPoints 和重新缩放

arrays - 迭代一系列字典以获得最高的 gpa

ios - Swift 3,如何首先解析并在下一个 TableViewController 上显示它

iphone - 应用程序应该在应用程序启动结束时在控制台中显示一个 Root View Controller

ios - 看到过渡中间闪烁吗?

ios - 使用 Swift 在 iPhone 上以编程方式关闭设置应用程序

xcode - 不支持推送导航 Controller 错误消息