Post

Replies

Boosts

Views

Activity

UITableView cells shift upwards?
This is driving me nuts. I have a UITableView w/ constraints =0 to leading, trailing, and top/bottm of safe area. The tableview is constrained exactly the same was as other TableViews in my app- but on this controller specifically it shifts upwards so the cell is butted up against the navigation bar. Any ideas as to what's causing this?? Should spacing should look like this. Gray space between navigation bar and TableViewCell. Error state - no gap between navigation bar and tableview cell.
0
0
1k
Feb ’22
Cell only shows and hides once; and then not able to show again
Hello, I'm trying to display/hide a UIDatePicker embedded in a UITableViewCell. My intention is that the datePicker will start hidden. Then when the user selects the startDate label in the cell above the date picker, the cell's row hight will adjust, making the datePicker visible. Then when the user taps the startDate label again, the datePicker hides. They should be able to do this indefinitely. In this code, the datePicker starts out hidden (as intended), shows when the user selects the StartDate label (as intended) and then hides when the user selects the startDate label again (as intended). However, if the user tries to show the datePicker for a 2nd time, nothing happens. video link: https://youtube.com/shorts/blu1OCBOCiE?feature=share class AddEditLogbookTableViewController: UITableViewController {     @IBOutlet var nameTextField: UITextField!     @IBOutlet var descriptionTextField: UITextField!     @IBOutlet var startDateLabel: UILabel!     @IBOutlet var startDateDatePicker: UIDatePicker!     var logbook: Logbook?     //Couple variables related to displaying/hiding the date picker     var startDatePickerCellIndexPath = IndexPath(row: 3, section: 0)     var startDateLabelCellIndexPath = IndexPath(row: 2, section: 0)     var isStartDatePickerVisible: Bool = false {         didSet {             startDateDatePicker.isHidden = !isStartDatePickerVisible         }     }     init?(coder: NSCoder, logbook: Logbook?) {         self.logbook = logbook         super.init(coder: coder)     }     required init?(coder: NSCoder) {         fatalError("init(coder:) has not been implemented")     }     override func viewDidLoad() {         super.viewDidLoad()         updateDateView()     }     @IBAction func startDatePickerValueChanged(_ sender: UIDatePicker) {         updateDateView()     }     func updateDateView() {         var dateFormatter: DateFormatter = {             let dateFormatter = DateFormatter()             dateFormatter.dateStyle = .medium             return dateFormatter         }()         startDateLabel.text = dateFormatter.string(from: startDateDatePicker.date)     }     override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {         switch indexPath {         case startDatePickerCellIndexPath:             if !isStartDatePickerVisible {                 print("indexPath: \(indexPath) row height: 0 if")                 return 0             }             else {                 print("indexPath: \(indexPath) row height: \(UITableView.automaticDimension) if/else")                 return UITableView.automaticDimension }         default:             print("indexPath: \(indexPath) row height: \(UITableView.automaticDimension) default")             return UITableView.automaticDimension         }     }     override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {         tableView.deselectRow(at: indexPath, animated: true)         if indexPath == startDateLabelCellIndexPath {             isStartDatePickerVisible.toggle()             print("isStartDatePickerVisible Toggled. Value: \(isStartDatePickerVisible)")         } else { return }         tableView.beginUpdates()         tableView.endUpdates()     } } The print statements output as follows. Tap 1: indexPath: [0, 1] row height: -1.0 default indexPath: [0, 1] row height: -1.0 default indexPath: [0, 0] row height: -1.0 default indexPath: [0, 0] row height: -1.0 default indexPath: [0, 2] row height: -1.0 default indexPath: [0, 2] row height: -1.0 default indexPath: [0, 3] row height: -1.0 if/else indexPath: [0, 3] row height: -1.0 if/else Tap 2: indexPath: [0, 1] row height: -1.0 default indexPath: [0, 1] row height: -1.0 default indexPath: [0, 0] row height: -1.0 default indexPath: [0, 0] row height: -1.0 default indexPath: [0, 2] row height: -1.0 default indexPath: [0, 2] row height: -1.0 default indexPath: [0, 3] row height: 0 if Tap 3: indexPath: [0, 1] row height: -1.0 default indexPath: [0, 1] row height: -1.0 default indexPath: [0, 0] row height: -1.0 default indexPath: [0, 0] row height: -1.0 default indexPath: [0, 2] row height: -1.0 default indexPath: [0, 2] row height: -1.0 default Tap 4: indexPath: [0, 1] row height: -1.0 default indexPath: [0, 1] row height: -1.0 default indexPath: [0, 0] row height: -1.0 default indexPath: [0, 0] row height: -1.0 default indexPath: [0, 2] row height: -1.0 default indexPath: [0, 2] row height: -1.0 default
1
0
399
Dec ’21
Interface builder not setting button title?
I'm just learning how to build apps using Swift and Xcode. I'm following along through the Xcode Fundamentals book, and ran into an issue in the "Apple Pie" project. When you tap a button, the button is supposed to reference the button title and set a variable to the button title, but the title instead comes through as "nil" and the app crashes, even though a title is set in interface builder. I created a basic new app to test how I think this code should be working - see screenshots. When the button (title: Aaron) is tapped, the console should print the button title, but instead I'm getting the "nil" value. What am I missing here?
8
1
3.4k
Oct ’21