mmick66 / CalendarView

An Easy to Use Calendar for iOS (Swift 5.0)
MIT License
597 stars 114 forks source link

With iOS 15 - the selected border and color don't seem to be working #140

Open jfbomber opened 3 years ago

jfbomber commented 3 years ago

The selected color doesn't seem to be working in iOS 15. ` self.calendarView = CalendarView()

    self.calendarView.backgroundColor = UIColor.white  

    self.calendarView.delegate = self

    self.calendarView.dataSource = self

    self.calendarView.direction = .horizontal

    self.calendarView.multipleSelectionEnable = false

    self.calendarView.setDisplayDate(Date())

    self.calendarView.marksWeekends = false

    self.calendarView.style.cellSelectedBorderColor = .red

    self.calendarView.style.cellSelectedColor = .green

    self.calendarView.style.cellSelectedTextColor = .green

`

jibrank commented 3 years ago

i'am facing the same issue the style part of calendar is not working.

  let style = CalendarView.Style()

    style.cellShape                = .round
    style.cellColorDefault         = UIColor.clear
    style.cellTextColorDefault     = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)

    style.cellColorToday           = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    style.cellTextColorToday       = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)

    style.headerTextColor          = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
    style.headerBackgroundColor    = UIColor.white

    style.cellEventColor           = UIColor.clear

    style.cellTextColorWeekend     = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
    style.firstWeekday             = .sunday
    style.weekdaysBackgroundColor  = UIColor.white
    style.cellColorOutOfRange      = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)

    style.cellSelectedBorderColor = UIColor(red: 193.0/255.0, green: 165.0/255.0, blue: 139.0/255.0, alpha: 1.0);
    style.cellSelectedColor = UIColor(red: 193.0/255.0, green: 165.0/255.0, blue: 139.0/255.0, alpha: 1.0);
    style.cellSelectedTextColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    style.cellSelectedBorderWidth = 1.0
jfbomber commented 3 years ago

@jibrank Have you had any luck updating it?

I have tried editing the project code but it seems to be something with the update of the UICollectionView on iOS 15.

zkhCreator commented 3 years ago

@jfbomber I find the problem. In apple's document, they said:

You typically do not set the value of this property directly. Changing the value of this property programmatically does not change the appearance of the cell. The preferred way to select the cell and highlight it is to use the selection methods of the collection view object.

and in Calender, it called cell.isSelected and force reload the collectoinView.

It makes UICollectionView didn't show the style of the cell. If you want to fix it, you can change these things. Like disable selectionStyle and create a new method for cell to update style. And if you want to use multiSelection, you can set the collectionView's multiSelection property.

zkhCreator commented 3 years ago

@jfbomber You can see the fix code in https://github.com/zkhCreator/CalendarView/pull/1

nik6018 commented 3 years ago

@zkhCreator I integrated your code, still it's not showing Selected Cells Border :( .

jfbomber commented 3 years ago

@nik6018 It did work for me. I just used his forked version of the branch pod 'KDCalendar', :git => 'https://github.com/zkhCreator/CalendarView'

nik6018 commented 3 years ago

@jfbomber Thanks for informing. @zkhCreator Can you please confirm if any more changes are needed to be included other than the commit mentioned in the above comment ?

zkhCreator commented 3 years ago

@nik6018 the border color is ok in my repo. Maybe you should use the master branch, don't copy the merge request code, because I fix some bug not in the merge request. here is the screenshoot. IMG_7568 2

khedheri commented 2 years ago

@zkhCreator seems like you correct the issue , but you forget to upgrade the s.version in "KDCalendar.podspec", so when users try to update pods, cocoapods can't recognise that a new version is available. upgrade the version number "KDCalendar.podspec", then users can update the pod

zkhCreator commented 2 years ago

@khedheri you can use my repo's master branch, because of my repo is not the main repo of Calendar repo.If I update the podspec, it will influence the version of main repo

nik6018 commented 2 years ago

EDIT :

After further inspection it seems like if I make the allowSelection property on CalendarView false programmatic selection doesn't work (it used to work on pre-iOS15). My requirement is a bit unusual as in I want programmatic selection but disable selection via user input :( +++++++++++++++++++++++++++++++++++++++++++++++++++++++

@zkhCreator I tried by downloading your master branch but still I am not getting the result I want :(

If I wasn't clear I am trying to select the date programmatically using calendarView.selectDate(_:) method and want to display a border around the selected cell.

Selecting the dates by directly tapping on the Calendar View is working as expected, but in my case I only want to select the dates programmatically.

While checking the class CalendarDayCell the isSelected computed property contains the following lines

    switch isSelected {
            case true:
                self.bgView.layer.borderColor = style.cellSelectedBorderColor.cgColor
                self.bgView.layer.borderWidth = style.cellSelectedBorderWidth
                self.bgView.backgroundColor =  style.cellSelectedColor

The color & border color applied on the bgView doesn't show for some reason, if dates are selected programmatically.

But If I copy the above 3 lines and put them in the updateTextColors() method inside the isSelected if condition, then selected cell border color shows properly like before iOS 15.

Any idea why this is the case ?

lygon55555 commented 2 years ago

@zkhCreator thank you so much for fixing the code👍

jibrank commented 2 years ago

@zkhCreator i used your code but few things are not working as it was working before

  1. i can select out of range dates
  2. Programatically dates cant be selected. Simulator Screen Shot - iPhone 13 Pro - 2022-01-17 at 19 22 39
jibrank commented 2 years ago

@nik6018 you can use this, it has same functionalities https://github.com/WenchaoD/FSCalendar

prapawity commented 2 years ago

iOS 15.3 issue was solved, but why, iOS 15.3 just security update

Agisight commented 1 year ago

https://stackoverflow.com/a/31387259

Here is the solution:

Снимок экрана 2022-12-08 в 17 17 27
        dayCell.isSelected = selectedIndexPaths.contains(indexPath)
        if dayCell.isSelected {
            collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredHorizontally)
        }

@mmick66

mmick66 commented 1 year ago

Please write a RP. Thank you.

Agisight commented 1 year ago

@mmick66 I see a new working PR which fixed the issue. So you can choose which one is better. I vote for andygeers/ios15 version. So, do you still need my PR?

Merge pull request #143 from andygeers/ios15 2e677a0 Michael Michailidis mmick66@gmail.com 7 дек. 2022 г., 16:45

Agisight commented 1 year ago

https://github.com/mmick66/CalendarView/pull/145

Here is a PR with my lines above