UiButton位置不会以编程方式更改ios

时间:2016-09-22 09:54:27

标签: ios swift uitableview autolayout nslayoutconstraint

我正在进行自动调整tableview,如tableview高度将根据其内容进行更改。为此,我使用此代码

  override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    dispatch_async(dispatch_get_main_queue(),{
    self.tblReceipt.sizeToFit()
    var frame = self.tblReceipt.frame
    frame.size.height = self.tblReceipt.contentSize.height
    self.tblReceipt.frame = frame 
}

我能够做到这一点。

比我在桌面视图中添加按钮底部。 从tableview设置顶部位置我正在使用此代码

let pinTop = NSLayoutConstraint(item: self.btnPrint, attribute: .Top, relatedBy: .Equal,
            toItem: self.tblReceipt, attribute: .Bottom, multiplier: 1.0, constant: 10)

        self.btnPrint.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activateConstraints([pinTop])

我这样做是因为无论桌面视图的大小是多少。按钮应该总是来自tableview。

但这不起作用。以下是错误的屏幕截图

enter image description here

enter image description here

UITableView委派方法

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrReceipt.count
  }

数据源方法

  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
      let cell:PrintCell = (tblReceipt.dequeueReusableCellWithIdentifier("PrintCell"))! as! PrintCell
        cell.lblProductName.text  = arrReceipt[indexPath.row].objectForKey("product_name") as? String
        cell.lblProductPrice.text = String(format:"%.2f", arrReceipt[indexPath.row]["product_price"]!!.doubleValue)

        return cell
    }

2 个答案:

答案 0 :(得分:3)

您需要将按钮放在UITableView的最后一个单元格中,以便您可以创建自定义单元格,如下所示。

Goto File-> New-> Cocoa Touch Class然后命名yourCell并创建Xib

enter image description here

现在点击newaly创建的Xib并设计你的单元格。在您的情况下,您可以在单元格中放置一个按钮并应用一些autoLayout约束,如下所示

enter image description here

现在在自定义单元格类中创建按钮的IBOutlet。你定制的单元类应该看起来像这样。

import UIKit

class YourTableViewCell: UITableViewCell {

@IBOutlet weak var yourButton: UIButton!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}


class func cellForTableView(tableView: UITableView, atIndexPath indexPath: NSIndexPath) -> YourTableViewCell {

    let kYourTableViewCellIdentifier = "kYourTableViewCellIdentifier"
    tableView.registerNib(UINib(nibName: "YourTableViewCell", bundle: NSBundle.mainBundle()), forCellReuseIdentifier: kYourTableViewCellIdentifier)

    let cell = tableView.dequeueReusableCellWithIdentifier(kYourTableViewCellIdentifier, forIndexPath: indexPath) as! YourTableViewCell

    return cell
}

}

您的自定义单元格现在可以使用了。所以在你的tableViewController类cellForRowAtIndexPath中编写此代码

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

if (indexPath.row == (arrReceipt.count)) {

    let cell = YourTableViewCell.cellForTableView(tableView, atIndexPath: indexPath)
    // code for last cell 
    return cell

} else {
    let cell:PrintCell = (tblReceipt.dequeueReusableCellWithIdentifier("ButtonCell"))! as! PrintCell

    // code for other rows in tableView
    return cell
   }    
}

并在numberOfRowsInSection中返回yourDataSourceArray.count + 1

我希望这会有所帮助。如果您发现任何困难,请告诉我。

答案 1 :(得分:0)

为什么不考虑在代码中创建一个完整的UIView,然后将按钮放在需要的位置。示例:FooterView?

我找到了这段代码:

CGRect frame = CGRectMake(0,0,320,40);
UIView *footerView = [[UIView alloc] initWithFrame:frame];
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
[aButton addTarget:self action:@selector(btnAddRowTapped:)     forControlEvents:UIControlEventTouchUpInside];
aButton.frame = frame;
[footerView addSubView:aButton];
[yourTableNmae setTableFooterView:footerView];