2015-01-10 29 views
5

Float a UIButton'u, TableView'ın evrensel olarak bölüm başlığında sağa hizalamaya çalışıyorum. Şimdiye kadar sadece tek bir ekran boyutu için kısıtlamaları eklemek başardı ... İşte Tablo görünümünde düğme yapmak header şamandıra/sağa doğru programsal olarak hizala // Swift

benim kod şimdiye kadar olduğu

:

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 

} 

nasıl düğme doğru yüzer yapabilirsiniz? Kısıtlamaların geri kalanı onlar gibi kalabilirler ...

THX yardımlarınız için! // Seb

+0

Eğer "doğru yüzer" derken neyi kastediyorsunuz? "Bir ekran boyutu için kısıtlamalar eklediniz" diyorsunuz, ancak hiçbir kısıtlama eklemediniz. Burada herhangi bir kısıtlama ekleyen herhangi bir kod yoktur (kısıtlamalarla, NSLayoutConstraints demektir). – rdelmar

+0

Üzgünüz, yeniyim! Yani aslında programatik olarak kısıtlamaları nasıl ayarlayacağımı bilmiyorum. Düğmenin her cihazda bölüm başlığının sağ tarafında olmasını istiyorum. "CGRectMake (320, 10, 30, 30)" üzerindeki kodla, düğmenin iPhone 6 resminin sağ tarafında olduğu sabit bir konumu vardır. ;-) – Seb

+0

Bunun nasıl yapılacağı hakkında bir fikriniz yoksa, kısıtlamaları programsal olarak eklemek için ihtiyaç duyduğunuz hızlı ve objektif C yöntemlerini içerecek olan NSLayoutConstraint sınıf başvurusunu okumalısınız. Kodu yazmayı denemelisiniz ve takılırsanız daha spesifik bir soruyla geri dönmelisiniz. – rdelmar

cevap

8

Thx

@rdelmar ve herkes inanılmaz cevap @Seb paylaşımı için ;-)

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

Thnx interessted gerekip gerekmediğini buradan biraz araştırma cevaptır. Swift'de, cevabınızı etkileyen bazı değişiklikler yapıldığı için. Ben Swift 3 ve 4'te aynı şeyi nasıl bir örnek vereceğiz:

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 
} 
İlgili konular