Browse Source

Merge pull request #989 from deltachat/fix-empty-state

Empty search -> make  empty state banner always visible
cyBerta 4 năm trước cách đây
mục cha
commit
83010c02d8

+ 3 - 9
deltachat-ios/Controller/GroupMembersViewController.swift

@@ -82,18 +82,9 @@ class GroupMembersViewController: UITableViewController {
         navigationItem.hidesSearchBarWhenScrolling = false
         configureTableView()
         definesPresentationContext = true
-        setupSubviews()
     }
 
     // MARK: - setup + configuration
-    private func setupSubviews() {
-        view.addSubview(emptySearchStateLabel)
-        emptySearchStateLabel.translatesAutoresizingMaskIntoConstraints = false
-        emptySearchStateLabel.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor).isActive = true
-        emptySearchStateLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 40).isActive = true
-        emptySearchStateLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -40).isActive = true
-        emptySearchStateLabel.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true
-    }
 
     private func configureTableView() {
         tableView.register(ContactCell.self, forCellReuseIdentifier: ContactCell.reuseIdentifier)
@@ -176,10 +167,13 @@ extension GroupMembersViewController: UISearchResultsUpdating {
                 searchText
             )
             emptySearchStateLabel.text = text
+            emptySearchStateLabel.frame = CGRect(x: 0, y: 0, width: 0, height: emptySearchStateLabel.intrinsicContentSize.height)
             emptySearchStateLabel.isHidden = false
+            tableView.tableHeaderView = emptySearchStateLabel
         } else {
             emptySearchStateLabel.text = nil
             emptySearchStateLabel.isHidden = true
+            tableView.tableHeaderView = nil
         }
     }
 }

+ 3 - 11
deltachat-ios/Controller/NewChatViewController.swift

@@ -84,7 +84,6 @@ class NewChatViewController: UITableViewController {
         }
         tableView.register(ActionCell.self, forCellReuseIdentifier: "actionCell")
         tableView.register(ContactCell.self, forCellReuseIdentifier: "contactCell")
-        setupSubviews()
     }
 
     override func viewWillAppear(_ animated: Bool) {
@@ -92,16 +91,6 @@ class NewChatViewController: UITableViewController {
         deviceContactAccessGranted = CNContactStore.authorizationStatus(for: .contacts) == .authorized
     }
 
-    // MARK: - setup
-    private func setupSubviews() {
-        view.addSubview(emptySearchStateLabel)
-        emptySearchStateLabel.translatesAutoresizingMaskIntoConstraints = false
-        emptySearchStateLabel.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor).isActive = true
-        emptySearchStateLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 40).isActive = true
-        emptySearchStateLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -40).isActive = true
-        emptySearchStateLabel.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor).isActive = true
-    }
-
     // MARK: - actions
     @objc func cancelButtonPressed() {
         dismiss(animated: true, completion: nil)
@@ -295,9 +284,12 @@ class NewChatViewController: UITableViewController {
             )
             emptySearchStateLabel.text = text
             emptySearchStateLabel.isHidden = false
+            emptySearchStateLabel.frame = CGRect(x: 0, y: 0, width: 0, height: emptySearchStateLabel.intrinsicContentSize.height)
+            tableView.tableHeaderView = emptySearchStateLabel
         } else {
             emptySearchStateLabel.text = nil
             emptySearchStateLabel.isHidden = true
+            tableView.tableHeaderView = nil
         }
     }
 

+ 6 - 0
deltachat-ios/View/EmptyStateLabel.swift

@@ -26,6 +26,12 @@ class EmptyStateLabel: FlexLabel {
         }
     }
 
+    override var intrinsicContentSize: CGSize {
+        let width = layoutMargins.left + layoutMargins.right + label.intrinsicContentSize.width
+        let height = layoutMargins.top + layoutMargins.bottom + label.intrinsicContentSize.height
+        return CGSize(width: width, height: height)
+    }
+
     override init() {
         super.init()
         label.backgroundColor = DcColors.systemMessageBackgroundColor