我必须创建一个看起来像这样的屏幕。
我有almsot使用UITableViewController
完成了它。我走这条路线而不是使用UIViewController
和UIScrollView
的原因是,中间的表视图是静态的,只有UITableViewControllers
可以有静态表视图。无论如何,我目前的结果就是这个。
表的标题视图顶部包含标签,页脚视图包含地图视图。
我为这两个按钮创建了一个单独的UIView
子类,其中有一个名为ButtonView
的nib。
import UIKit
class ButtonView: UIView {
@IBOutlet var view: UIView!
@IBOutlet weak var declineButton: UIButton!
@IBOutlet weak var acceptButton: UIButton!
override init(frame: CGRect) {
super.init(frame: frame)
NSBundle.mainBundle().loadNibNamed("ButtonView", owner: self, options: nil)
self.bounds = view.bounds
self.addSubview(self.view)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NSBundle.mainBundle().loadNibNamed("ButtonView", owner: self, options: nil)
self.addSubview(self.view)
}
}
我尝试将其添加到表格视图控制器view
然后tableView
,但两次都将其添加到滚动视图中。我希望这些按钮固定在底部。所以我将它们添加到window
。
class TableViewController: UITableViewController {
var buttonView: ButtonView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 35, right: 0)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
buttonView = ButtonView(frame: CGRect(x: 0, y: view.frame.size.height - 35, width: view.frame.width, height: 35))
UIApplication.sharedApplication().keyWindow!.addSubview(buttonView)
}
}
但正如您从上面的屏幕截图中看到的那样,按钮'宽度不对。它们没有适当调整大小以适应屏幕。我在ButtonView
。
如何让他们适当调整大小并适合屏幕?
答案 0 :(得分:2)
我建议走另一条路。将您的UITableviewController
放在普通视图控制器的容器视图中。它为您提供两全其美的体验。您的父VC可以拥有您想要的任何视图,并且包含的UITableviewController
可以为您管理静态表视图。
以下是一个示例项目的链接:(在Objective-C中,但概念和布局完全相同。)
https://github.com/DuncanMC/test
正如@Gordonium在他的回答中提到的那样,在代码中添加视图但不设置约束很少会得到你想要的结果。如果您在代码中添加视图并且您正在使用AutoLayout,那么您还需要添加一组约束来指定视图的大小和间距。使用IB来设置视图及其约束通常更容易。
答案 1 :(得分:2)
在这里 - 我为您设置了一个基本项目。
您可以在此处获取:https://github.com/99arobe/ButtonTest
它使用容器和自动布局,所以它应该让你开始。它大致如下:
可能有一些方法可以做到这一点,但是当您开始在代码中设置视图的帧时,除非您手动添加该代码,否则您将无法获得自动布局的好处。
答案 2 :(得分:1)
除了Duncan的建议,如果您不想要容器视图,还有另一种解决方法可以解决您的问题。按照您现在的操作将按钮视图添加到表中,实施scrollViewDidScroll
UIScrollViewDelegate
方法,并根据{{更改按钮的视图origin.y
表的1}}并且,不要忘记在桌面上添加一些底部内容,以便在滚动到底部时按钮视图不会重叠任何内容。希望这有用。祝你好运!