如何添加约束以编程方式将两个视图连接在一起?

时间:2019-01-11 02:08:31

标签: ios swift autolayout

我正在尝试将我的UISearchbar和UITableView置于彼此之间。我尝试了self.tableview.origin.y = self.searchbar.origin.y + self.searchbar.frame.height之类的方法,但徒劳无功。在不同的设备模拟器中运行时,tableview只是附加在不同的y位置。我需要以编程方式完成此操作,因为我已经以这种方式创建了表格视图。

image 图片链接:https://ibb.co/T8jHLtz

func viewDidLoad(){
  recentSearchesTableView.frame = CGRect(x: 0, y: 200, width: view.frame.width, height: view.frame.height)
        recentSearchesTableView.delegate = self
        recentSearchesTableView.dataSource = self
        recentSearchesTableView.register(UITableViewCell.self, forCellReuseIdentifier: "RecentSearchCell")
        recentSearchesTableView.tag = 202
        recentSearchesTableView.isUserInteractionEnabled = true
        recentSearchesTableView.tableFooterView = UIView()
}

编辑:事实证明recentSearchesTableView.frame.origin.y = searchBar.frame.origin.y + searchBar.frame.height可以在iPhone X以下的所有设备上完美运行,但在iPhone X及更高版本上的搜索栏和表格视图重叠:/

3 个答案:

答案 0 :(得分:1)

向表视图添加搜索栏的最佳方法是使用UISearchController

override func viewDidLoad() {
    super.viewDidLoad()

    // You may need this for presenting the search controller
    definesPresentationContext = true

    searchController = UISearchController(searchResultsController: nil)
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchResultsUpdater = self
    searchController.delegate = self
    if #available(iOS 11.0, *) {
        navigationItem.searchController = searchController
//        navigationItem.hidesSearchBarWhenScrolling = false
    } else {
        tableView.tableHeaderView = searchController.searchBar
    }
}

这将使管理逻辑和显示搜索结果更加容易。

答案 1 :(得分:0)

尝试对搜索字段和表格视图使用此约束。

//这将搜索顶部,领先,尾随和50.0高度限制

searchField.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
searchField.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
searchField.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
searchField.heightAnchor.constraint(equalToConstant: 50.0).isActive = true

// Tableview顶部,顶部,底部和底部约束

tblExpand.topAnchor.constraint(equalTo: searchField.bottomAnchor).isActive = true

tblExpand.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
tblExpand.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
tblExpand.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true

答案 2 :(得分:0)

也许您可以尝试对tableView执行此操作

SELECT 
    id  
    ,value  
    ,acc_no
    ,value - isnull(sum([value])  over (partition by acc_no order by id rows between 1 preceding and 1 preceding ), 0) as result
FROM tb_acc t
order by id