Frage make button in der Tabellenansicht Sektion header float / align right programmgesteuert // Swift


Ich versuche, float ein UIButton nach rechts in der Section Header eines TableView universell auszurichten. Bis jetzt habe ich nur Einschränkungen für eine Bildschirmgröße hinzugefügt ...

Hier ist mein Code soweit:

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

}

Wie kann ich den Knopf richtig schweben lassen? Der Rest der Beschränkungen kann bleiben, wie sie sind ...

THX für Ihre Hilfe!

// Seb


5
2018-01-10 18:55


Ursprung


Antworten:


Danke an @delmarmar und ein paar Recherchen hier ist die Antwort wenn jemand interessiert sein sollte ;-)

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

}

8
2018-01-10 22:18



Thnx für das Teilen der erstaunlichen Antwort @Seb. Da in Swift einige Änderungen vorgenommen wurden, die sich auf Ihre Antwort auswirken. Ich werde ein Beispiel für die Vorgehensweise in Swift 3 und 4 geben:

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
}

1
2017-11-05 15:20