Mijick / NavigationView

Navigation made simple (SwiftUI)
MIT License
231 stars 8 forks source link

NavigationView creates a black view to appear when using a textfield #43

Open Nathan1258 opened 1 month ago

Nathan1258 commented 1 month ago

As shown:

https://github.com/Mijick/NavigationView/assets/53881694/43c848f8-d72e-4104-9ba2-9a455266c3a4

Clicking on a textfield will cause a black (or the colour you set config.backgroundColour as within the NavigationGlobalConfig) to appear and fill the entire view.

FulcrumOne commented 1 month ago

Hey @Nathan1258,

The problem should be solved in the "patch-1.1.1" branch. Could you please check it and let me know? Thanks!

Nathan1258 commented 1 month ago

Hi @FulcrumOne,

I can confirm the problem has been solved - thank you for being so speedy! Nice to see my UI when entering text 🤣

Will return to stable branch now and wait for patch-1.1.1 to be merged!

clbemre commented 1 month ago

Hello @FulcrumOne , I have same problem, and up to date. config.backgroundColour = .red

image
FulcrumOne commented 1 month ago

@clbemre, Hey, I'll look at this at the weekend

PS. Could you paste here the code I can use to reproduce it? Thanks a million!

clbemre commented 1 month ago

@FulcrumOne Hey thank you, I noticed that also, drag gesture conflicts with scrollview and causes an wrong behavior.

Additionally maybe you can add view.navigationBackGesture(.dragEdges) 😀

FulcrumOne commented 1 month ago

@FulcrumOne Hey thank you, I noticed that also, drag gesture conflicts with scrollview and causes an wrong behavior.

Additionally maybe you can add view.navigationBackGesture(.dragEdges) 😀

There is such an option, I don't remember how it's called exactly but one of NavigationGlobalConfig 😉

clbemre commented 1 month ago

@FulcrumOne
I just saw view.navigationBackGesture(.drag). No (.dragEdges), i don't know :)

FulcrumOne commented 1 month ago

In a file "Public+NavigationGlobalConfig", there should be three attributes - backGesturePosition (the one that you're looking for), backGestureThreshold and backgroundColour. Could you confirm that in the version you use, all three attributes exist?

clbemre commented 1 month ago

@FulcrumOne aa okey, i see. We have to configure global config. I thought we could adjust this on a per page basis sorry :)

FulcrumOne commented 1 month ago

@clbemre,

Do you think it would be better to add this option to every screen?

clbemre commented 1 month ago

No but I just want to override . And my main problem is not this. My problem in video :)

FulcrumOne commented 1 month ago

yeah, tomorrow or Saturday I'm returning to this library 😅

jay-jay-lama commented 1 month ago

Hello, @clbemre Could you share a code that contains an issue with background color? It will help me to speed up the problem-solving process.

Also the issue with the offset for horizontal drag-gesture action has been resolved in the branch Patch-1.1.2. Feel free to give it a try and let us know if it doesn't work as expected.

clbemre commented 1 month ago

@jay-jay-lama Hello, my code like this in short.

 var body: some View {
        DefaultContainerView {
            VStack(spacing: 0) {
                navigationBarView
                    .padding(.horizontal, 20)
                ScrollView {
                    VStack(spacing: 20) {
                        Group {
                            nameTextField
                            surnameTextField
                            emailTextField
                        }
                    }
                        .padding(.top, 30)
                        .padding(.horizontal, 20)
                }.scrollDisabled(!isShownKeyboard)
            }.overlay(alignment: .bottom, content: { saveButtonView })
        }
            .keyboardToolbar(focusedField: $focusedField, currentVisibilityID: .toolbarVisibilityID)
            .onKeyboardAppear { self.isShownKeyboard = $0 > 0 }
            .animation(.smooth, value: isShownKeyboard)
            .onTap { focusedField = nil }
    }

also

struct DefaultContainerView<Content: View>: View {

    let content: Content

    init(@ViewBuilder content: () -> Content) {
        self.content = content()
    }

    var body: some View {
        ZStack {
            DefaultBackgroundView()

            content
        }
    }
}
FulcrumOne commented 1 month ago

@clbemre, both problems should be resolved in the newest version

clbemre commented 1 month ago

@FulcrumOne Thank you!

clbemre commented 1 month ago

@FulcrumOne It has solved. But just there is a little problem.

FulcrumOne commented 1 month ago

Oh, could you describe it, because I'm clearly blind and can't notice it 😅

clbemre commented 1 month ago

@FulcrumOne when it first opens on each screen there is a flicker for the first time when trying to scroll and then it works fine without flickering 😀

FulcrumOne commented 1 month ago

Oh, yeah, you're right. I'll check it, thanks

clbemre commented 1 month ago

@FulcrumOne I have tested without NavigationView plugin this page. When I remove the navigationview plugin from the page, I do not encounter this problem.

jay-jay-lama commented 1 month ago

@FulcrumOne It seems that I've noticed the same problem if I use native solution without our library. Navigation bar has it's own observer of scrollView callbacks and it can be native problem. And issue appears not only on first screen presenting but also during switching between the textfields and also just during ordinary scrolling. So it's random... Need also your test to confirm the situation.

On the video the same problem with native solution.

https://github.com/user-attachments/assets/96582c54-c53f-4872-947b-802ed0a6b0c7

clbemre commented 1 month ago

I unserstood. But i told you , When I remove the navigationview plugin from the page, I do not encounter this problem. :)

clbemre commented 1 month ago

removed video. without NavigationView

clbemre commented 1 month ago

@FulcrumOne hey there is also a very little problem :)

removed video

with background

 var navigationConfig: NavigationGlobalConfig {
        var config = NavigationGlobalConfig()
        config.backgroundColour = .red
        config.backGesturePosition = .edge
        config.backGestureThreshold = 0.25
        return config
    }
clbemre commented 1 month ago

removed video. without background

var navigationConfig: NavigationGlobalConfig {
        var config = NavigationGlobalConfig() 
        config.backGesturePosition = .edge
        config.backGestureThreshold = 0.25
        return config
    }
FulcrumOne commented 1 month ago

@clbemre, this is actually tricky one and I doubt I will be able to "fix it" - background color cannot be clear, otherwise you always see the view underneath. It's because the animation of the views involves modifying their offset (or scale / rotation).

If you really need to make the safe areas clear, I strongly recommend using .ignoresSafeArea modifier 😉

clbemre commented 1 month ago

@FulcrumOne I set the background color. Actually, I don't have a problem with this, I just said it so you know :)

I use .ignoresSafeArea when necessary. But I don't understand where you mean I should use it :)

FulcrumOne commented 1 month ago

Oh, I just thought about an use-case like putting a picture that is supposed to be behind a status bar / home indicator and someone may think that it can be resolved with clear background (someone actually asked me exactly this). So if it's not your question just please ignore it 😅

That previous problem I'll try to resolve later today. Thanks for reporting!

clbemre commented 1 month ago

@FulcrumOne Hey, hello again. How are you? I have a little problem again :) I have tested without NavigationView. FYI :)

also it's block my keyboard toolbarview visibility.

https://github.com/user-attachments/assets/dbcbe535-de96-4076-9b01-ea97c761f989

FulcrumOne commented 1 month ago

hello again, @clbemre 😉

does this behaviour only occur with maps (and scrolling views partially)? Could you please provide me with the code I can use to reproduce the above bug? Thanks!

clbemre commented 3 weeks ago

@FulcrumOne Hello again. Also I have conflick drag gestures.

I have using this framework. https://github.com/ciaranrobrien/SwiftUIPageView but I got confilict with back gestures.

https://github.com/user-attachments/assets/f0962e68-5405-4a9f-bff4-4fdad73132a1

clbemre commented 3 weeks ago

My code like that; (i will delete later, sorry @FulcrumOne )

deleted code

clbemre commented 3 weeks ago

@FulcrumOne Hello, Did you check it?

FulcrumOne commented 3 weeks ago

hey @clbemre,

I've saved the code (so you can delete it), but currently I'm working on PopupView. Sorry, will return to this issue as soon as I finish the sprint for that library 😉

P.S. Soon the tasks should be done a bit faster, as we have expanded our team a bit 😉

FulcrumOne commented 3 weeks ago

Btw, if you use Discord, you can join our here: https://discord.com/invite/dT5V7nm5SC

It's not ready yet, but at least we could communicate more effectively with PMs 😅

clbemre commented 3 weeks ago

@FulcrumOne thank you, I don't have Discord now :) okey I'll be waiting. It is important to solve the problem but there is no rush. 😀

Best regards.

clbemre commented 2 weeks ago

@FulcrumOne Hello again, how can apply opacity background ? view.backgroundColour(Color.brandBlueColor.opacity(0.2)), doesn't work?

clbemre commented 5 days ago

@FulcrumOne Hello, I'm still waiting for this topic. 👀 :)

FulcrumOne commented 5 days ago

Hey @clbemre,

Are you sure it doesn't work? I just tried and here's the effect: CleanShot 2024-08-19 at 11 41 02 CleanShot 2024-08-19 at 11 41 33

P.S. Sorry for not responding, but I'm busy with other libraries currently, and the next time window for this one will be mid-September ;)

clbemre commented 5 days ago

@FulcrumOne I have tried a few thinsg but I wasn't successful.

CompletedDialogView().push(with: .dissolve)

Global config

var navigationConfig: NavigationGlobalConfig {
        var config = NavigationGlobalConfig()
        config.backgroundColour = Color.viewBackgroundColor
        config.backGesturePosition = .edge
        config.backGestureThreshold = 0.25
        return config
    }

View Config

func configure(view: NavigationConfig) -> NavigationConfig {
        view.backgroundColour(Color.brandBlueColor.opacity(0.2))
}

// -> no background in contentView
 var body: some View {
        ZStack {
            contentView
                .padding(20)
        }.frame(maxWidth: .infinity, maxHeight: .infinity)
    }