在uitableview节标题中生成按钮以编程方式浮动/对齐// Swift

时间:2015-01-10 18:55:25

标签: ios objective-c uitableview swift

我试图将一个UIButton浮动到一个普遍的TableView的节头中的右边。 到目前为止,我只设法为一个屏幕尺寸添加约束......

到目前为止,这是我的代码:

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    var headerFrame:CGRect = tableView.frame

    let titelArr: NSArray = ["1", "2", "3", "4", "5", "6"]
    var title = UILabel(frame: CGRectMake(10, 10, 100, 30))
    title.font = UIFont.boldSystemFontOfSize(20.0)
    title.text = titelArr.objectAtIndex(section) as? String
    title.textColor = UIColor.whiteColor()


    var headBttn:UIButton = UIButton.buttonWithType(UIButtonType.ContactAdd) as UIButton
    headBttn.frame = CGRectMake(320, 10, 30, 30)
    headBttn.enabled = true
    headBttn.titleLabel?.text = title.text
    headBttn.tag = titelArr.indexOfObject(titelArr.objectAtIndex(section))
    headBttn.addTarget(self, action: "addItem:", forControlEvents: UIControlEvents.TouchUpInside)

    var headerView:UIView = UIView(frame: CGRectMake(0, 0, headerFrame.size.width, headerFrame.size.height))
    headerView.backgroundColor = UIColor(red: 108/255, green: 185/255, blue: 0/255, alpha: 0.9)
    headerView.addSubview(title)
    headerView.addSubview(headBttn)

    return headerView

}

如何使按钮浮动正确?其余约束可以保持原样......

THX为您提供帮助!

//的Seb

2 个答案:

答案 0 :(得分:8)

对于@rdelmar来说,如果有任何人应该被强迫,那么这里的一些研究就是答案; - )

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    var headerFrame = tableView.frame

    var headerView:UIView = UIView(frame: CGRectMake(0, 0, headerFrame.size.width, headerFrame.size.height))
    headerView.backgroundColor = UIColor(red: 108/255, green: 185/255, blue: 0/255, alpha: 0.9)

    var title = UILabel()
    title.setTranslatesAutoresizingMaskIntoConstraints(false)
    title.font = UIFont.boldSystemFontOfSize(20.0)
    title.text = titelArr.objectAtIndex(section) as? String
    title.textColor = UIColor.whiteColor()
    headerView.addSubview(title)

    var headBttn:UIButton = UIButton.buttonWithType(UIButtonType.System) as UIButton
    headBttn.setTranslatesAutoresizingMaskIntoConstraints(false)
    headBttn.enabled = true
    headBttn.titleLabel?.text = title.text
    headBttn.tag = titelArr.indexOfObject(titelArr.objectAtIndex(section))
    headBttn.addTarget(self, action: "addItem:", forControlEvents: UIControlEvents.TouchUpInside)
    headerView.addSubview(headBttn)

    var viewsDict = Dictionary <String, UIView>()
    viewsDict["title"] = title
    viewsDict["headBttn"] = headBttn

    headerView.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "H:|-10-[title]-[headBttn]-15-|", options: nil, metrics: nil, views: viewsDict))

    headerView.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "V:|-[title]-|", options: nil, metrics: nil, views: viewsDict))
    headerView.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "V:|-[headBttn]-|", options: nil, metrics: nil, views: viewsDict))

    return headerView

}

答案 1 :(得分:1)

Thnx分享了惊人的答案@Seb。由于Swift中有一些变化,这会影响你的答案。我将在Swift 3和4中提供一个如何执行相同操作的示例:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: tableView.frame.size.height))
    headerView.backgroundColor = UIColor.lightGray

    let title = UILabel()
    title.translatesAutoresizingMaskIntoConstraints = false
    title.text = "myTitle"
    headerView.addSubview(title)

    let button = UIButton(type: .system)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.setTitle("myButton", for: .normal)
    headerView.addSubview(button)

    var headerViews = Dictionary<String, UIView>()
    headerViews["title"] = title
    headerViews["button"] = button

    headerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-10-[title]-[button]-15-|", options: [], metrics: nil, views: headerViews))
    headerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[title]-|", options: [], metrics: nil, views: headerViews))
    headerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[button]-|", options: [], metrics: nil, views: headerViews))

    return headerView
}