Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JZColumnHeaderBackground and JZRowHeaderBackground is always white, and sticks out in dark mode. #121

Closed
gerkov77 opened this issue Jun 10, 2020 · 9 comments

Comments

@gerkov77
Copy link

Please, I have no information about where I can access and set the background properties of these reusable views. Also, what method should be overwritten for changing these, or dequeuing my own subclasses for these items .
If anyone could help me out here!
Thanks!

@gerkov77 gerkov77 changed the title JZColumnHeaderBackground and JZRowHeaderBackground is always white, and sticks out in sark mode. JZColumnHeaderBackground and JZRowHeaderBackground is always white, and sticks out in dark mode. Jun 10, 2020
@gerkov77
Copy link
Author

Ok, problem solved! I needed to learn how to register my subclasses here. I needed to register MyCustomColumnHeaderBackgroundClass.self with the string: JZDecorationViewKinds.columnHeaderBackground in the custom weekFlowlayout's init function.
And of course, backgroundColor property is accessible in the custom class' init() from that on.

@twilightDD
Copy link

twilightDD commented Mar 31, 2021

@gerkov77 Thank you!

I had the same problem and solved it like this. (It's probably the same way!)

class CalendarWeekView: JZBaseWeekView {
    
    //MARK: - JZBaseWeekView Methods    
    override func setup() {
        super.setup()
        collectionView.backgroundColor = UIColor.systemBackground // to support Dark Mode 
    }
    
    override func registerViewClasses() {
        super.registerViewClasses()
        
        // overwrite supplementary registers from super.registerViewClasses()
        collectionView.register(SOXColumnHeader.self,
                                forSupplementaryViewOfKind: JZSupplementaryViewKinds.columnHeader,
                                withReuseIdentifier: JZSupplementaryViewKinds.columnHeader)
        /* add register() for other supplementaryViews, too. See below.*/
        
        flowLayout.register(SOXColumnHeaderBackground.self,
                            forDecorationViewOfKind:  JZDecorationViewKinds.columnHeaderBackground)
        /* add register() for other decorationViews, too. See below.*/
    }
    
}

// Subclasses for Headers and Backgrounds
class SOXColumnHeader: JZColumnHeader {
    public override init(frame: CGRect) {
        super.init(frame: .zero)
        backgroundColor = .clear // the corresponding background-class will get the correct color
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}


class SOXColumnHeaderBackground: JZColumnHeaderBackground {
    public override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = UIColor.systemBackground // uses correct color on Dark Mode
    }
    required public init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

I subclassed

  • JZColumnHeader
  • JZCornerHeader
  • JZRowHeader
  • JZAllDayHeader

and the corresponding background classes

  • JZColumnHeaderBackground
  • JZRowHeaderBackground
  • JZAllDayHeaderBackground
  • JZAllDayCorner

the same way as shown in the example above.

Best regards!
Peter

Bildschirmfoto 2021-03-31 um 23 45 30

@spiccinocchi
Copy link

Great implementation,
but there is a problem if you change the apparence from ligth to dark while you are using the app. Have you found a solution for this issue?

@twilightDD
Copy link

Great implementation,
but there is a problem if you change the apparence from ligth to dark while you are using the app. Have you found a solution for this issue?

Well, I don't exactly understand what you mean ...

@spiccinocchi
Copy link

If you start the calendar app while the device is in light mode and set your custom background color and then change it in dark mode, there is no way to change the background again.
I hope is now more clear my problem

@twilightDD
Copy link

Thank you! I just works fine for me.

(I don't catch a notification to change the appearance, though.)

RPReplay_Final1618990805.MP4

@spiccinocchi
Copy link

Yes you are right, it works for you beacuse you choose the systembackground color and it's correctly changed in dark appearance by iOS.
The problem, for me, is that I don't catch a notification to change the appearance inside the class, so I can't use custum color for the background and also for the label.

@twilightDD
Copy link

twilightDD commented Apr 21, 2021

Yes you are right, it works for you beacuse you choose the systembackground color and it's correctly changed in dark appearance by iOS.

Which color do you use and in which subclass? A different system provided one or a complete custom?

@gerkov77
Copy link
Author

Yes you are right, it works for you because you choose the systembackground color and it's correctly changed in dark appearance by iOS.
The problem, for me, is that I don't catch a notification to change the appearance inside the class, so I can't use custom colour for the background and also for the label.

I was using custom colours -no systemBackrgound stuff- setting two different colour set for dark and light mode. Just set your custom colours in assets and assign it to light and dark modes, then use them with the calendar - there shouldn't be any problem with that..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants