CalendarView icon indicating copy to clipboard operation
CalendarView copied to clipboard

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

Open jfbomber opened this issue 4 years ago • 19 comments

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

`

jfbomber avatar Sep 23 '21 20:09 jfbomber

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

jibrank avatar Sep 27 '21 08:09 jibrank

@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.

jfbomber avatar Oct 07 '21 20:10 jfbomber

@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 avatar Oct 15 '21 14:10 zkhCreator

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

zkhCreator avatar Oct 16 '21 03:10 zkhCreator

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

nik6018 avatar Oct 18 '21 06:10 nik6018

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

jfbomber avatar Oct 18 '21 18:10 jfbomber

@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 ?

nik6018 avatar Oct 19 '21 05:10 nik6018

@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

zkhCreator avatar Oct 27 '21 00:10 zkhCreator

@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

khedheri avatar Nov 16 '21 11:11 khedheri

@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

zkhCreator avatar Dec 15 '21 03:12 zkhCreator

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 ?

nik6018 avatar Dec 16 '21 11:12 nik6018

@zkhCreator thank you so much for fixing the code👍

lygon55555 avatar Jan 16 '22 20:01 lygon55555

@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 avatar Jan 17 '22 16:01 jibrank

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

jibrank avatar Jan 17 '22 16:01 jibrank

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

prapawity avatar Feb 11 '22 07:02 prapawity

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

Agisight avatar Dec 08 '22 13:12 Agisight

Please write a RP. Thank you.

mmick66 avatar Dec 08 '22 13:12 mmick66

@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 [email protected] 7 дек. 2022 г., 16:45

Agisight avatar Dec 08 '22 15:12 Agisight

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

Here is a PR with my lines above

Agisight avatar Dec 09 '22 08:12 Agisight