奇怪的行为设置tableView行高和scrollPosition Swift

时间:2019-04-12 15:26:40

标签: ios swift uitableview uicollectionview

在同一viewController中,我有一个calendarTableView代表一个月的日子。在cellForRowAt中,选择与当天对应的行,然后调用一个函数来填充timeSlotCollectionView。一切正常,但我有一个奇怪的情况。

情况1:第height行=自动,scrollPosition.none = timeSlotCollectionView行不跟随cornerRadius

案例2:第height行=自动,scrollPosition.middle =线程1:calendarTableView单元格定义上的EXC_BAD_ACCESS(代码= 2,地址= 0x659ef4)

案例3:第height行= 44,scrollPosition.none = calendarTableView单元格不跟随cornerRadius

情况4:第height行= 44并且scrollPosition.middle = calendarTableView行不跟随cornerRadius

情况5:行heigh t = 60并且scrollPosition.none = calendarTableView单元格紧随cornerRadius

情况6:第height行= 60并且scrollPosition.middle = calendarTableView单元格不再跟随cornerRadius

我不介意行高为60,但是scrollPosition一定要居中。否则我将看不到当天的行。

您能看到我在做什么吗?我搜索了其他帖子,但找不到任何能为我提供线索的问题。 和往常一样非常感谢。 这是calendarTableView函数:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "calendarCell", for: indexPath) as! CalendarTableViewCell

        // Configure the cell...

        let date = datesArray[indexPath.row]
        print(date)

        let calendar = Calendar.current
        let components = calendar.dateComponents([.year, .month, .day, .weekday], from: date)

        cell.dayLabel.text = "\(String(describing: components.day!))" + " " + "\(dayNamesArray[components.weekday! - 1])"
        cell.cellWeekday = components.weekday!
        print("cell weekday is: \(cell.cellWeekday!)") // prints correct weekday

        cell.cellId = "\(String(format:"%04d", components.year!))" + "\(String(format:"%02d", components.month!))" + "\(String(format:"%02d", components.day!))"
        self.selectedDate = cell.cellId // used for time slots cellId
        print("##################### selectedDate in tableview is :\(self.selectedDate) ")

        // highlighting current day cell
        if indexPath.row == self.actualDay - 1 && self.actualMonth == self.displayedMonth {

            cell.dayLabel.backgroundColor = UIColor.red.withAlphaComponent(0.3)

            // emulate user selecting the cell
            tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none) // changing to .middle makes the tableview go looping
            print(" @@@@@@@@@@@@@@@@@@@@@@@@@@   selected cell weekday is: \(cell.cellWeekday!) @@@@@@@@@@@@@@@@@@@@ ")
//            self.updateTimeSlots(selectedCell: cell)
//            self.actualWeekday = cell.cellWeekday! // nil error
            self.selectedDate = cell.cellId
//            calculateOpenTimeSlots()

        }
//        let cornerRadius: CGFloat = 5
//        cell.layer.cornerRadius = cornerRadius
//        cell.clipsToBounds = true
//        self.updateTimeSlots(selectedCell: cell)
        return cell

    }

1 个答案:

答案 0 :(得分:0)

我决定不选择今天的event.userName,而是只滚动row使其处于中间位置。我也直接在calendarTableView中声明row heightheightForRowAt现在的行为符合预期,并且未直接选择单元格,而是按照我的实际需要突出显示了该单元格。 我希望这会帮助其他人。 最终功能是:

calendarTableView