如何使用Swift在UITableViewCell内部从NIB调整自定义UIView的大小?

时间:2015-03-14 10:03:26

标签: ios uitableview swift uiview nib

我想将自定义视图加载到静态UITableViewCell,并将视图调整为UITableViewCell的水平边界。

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

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

以下是我采取的步骤:

的UITableView

  1. 创建了单一视图应用

  2. 在StoryBoard中删除了视图并将TableViewController(TVC)拖到故事板上。将其嵌入UINavigationController

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

    1. 我使用FirstDetailView.xib创建了一个自定义视图作为笔尖InterfaceBuilder(FDV)。
    2. 添加了一些标签和文本字段。设置建议的约束。
    3. 然后我从UIView FirstDetailView.swift创建了一个子类,在Identity Inspector中将其连接到nib处的FDV。 此时,TextFields只有IBOutlet
    4. 载入

      1. 以下代码显示MTVC以及将视图加载到UITableViewCell的代码:
      2. 导入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 个答案:

答案 0 :(得分:1)

视图从笔尖加载并添加到单元格的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])