AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-3833632

CalebK's questions

Martin Hope
CalebK
Asked: 2025-04-25 11:33:24 +0800 CST

Tornar o fundo do conteúdo do TabView transparente para que um UIViewRepresentable WKWebView "constante" possa ser exibido atrás dele

  • 6

Estou criando um aplicativo em que a interface principal é uma WKWebView e o SwiftUI é usado apenas para algumas funções do aplicativo. Estou com um problema ao usar a interface do sistema SwiftUI TabView. Se você executar este aplicativo de exemplo, haverá um comportamento que não consigo explicar.

enum Page: String, Hashable, CaseIterable, Identifiable {
    case settings = "gear"
    case radio = "radio"
    case connect = "dot.radiowaves.right"
    
    var id: String { rawValue }
}

struct RandomColorHostedWebView: UIViewRepresentable {
    let webView: WKWebView
    
    init() {
        // Clear cache to be extra sure https://stackoverflow.com/a/34376943/3833632
        WKWebsiteDataStore.default().removeData(ofTypes: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache], modifiedSince: Date(timeIntervalSince1970: 0), completionHandler:{ })
        let webConfiguration = WKWebViewConfiguration()
        self.webView = WKWebView(frame: .zero, configuration: webConfiguration)
        let urlRequest = URLRequest(url: URL(string: "https://randomcolour.com")!)
        self.webView.load(urlRequest)
    }
    
    func makeUIView(context: Context) -> UIView {
        return webView
    }

    func updateUIView(_ uiView: UIView, context: Context) {
    }
}



struct ContentView: View {
    let pages = Page.allCases
    
    let randomColor: RandomColorHostedWebView
    init() {
        randomColor = RandomColorHostedWebView()
    }
    
    var body: some View {
        TabView {
            ForEach(pages) { page in
                randomColor
                    .tag(page)
                    .tabItem {
                        Label(page.rawValue, systemImage: page.rawValue)
                    }
            }
        }
    }
}

Se você executar isso, notará que cada aba clicada gera uma animação de atualização, mas não carrega uma nova cor. Além disso, quando você retorna para uma aba que já visitou, ela estará em branco.

Esse é um comportamento que não consigo explicar. (Gostaria de entender por que isso acontece)

Dito isso, presumo que a causa seja que o SwiftUI não tem ideia de que cada uma das visualizações pai do tabItem é a mesma visualização, pois elas têm identidades estruturais diferentes.

Então, estou procurando uma solução alternativa para deixar o fundo do TabView claro para que eu possa usar um ZStack, limitar a TabViewaltura somente para o conteúdo da aba para que eu possa usar um VStack, ou algo mais.

Esta solução existente tenta remover o fundo da TabView, mas parece não funcionar . Concordo com um comentarista que diz que a solução alternativa parece ter sido quebrada em versões posteriores do sistema operacional.

   var body: some View {
        ZStack {
            randomColor
            TabView {
                ForEach(pages) { page in
                    Color.clear
                        // https://stackoverflow.com/questions/63178381/make-tabview-background-transparent
                        .background(BackgroundHelper())
                        .tag(page)
                        .tabItem {
                            Label(page.rawValue, systemImage: page.rawValue)
                        }
                }
            }
        }
    }
swiftui
  • 1 respostas
  • 28 Views
Martin Hope
CalebK
Asked: 2025-04-24 15:35:25 +0800 CST

Existe uma maneira de dar ao aplicativo um quadro mínimo sem definir o quadro mínimo do conteúdo?

  • 6

Este aplicativo de exemplo, quando executado no macOS 15.4, exibe um comportamento de animação estranho ao abrir e fechar a barra lateral.

Tudo o que você precisa fazer para corrigir o problema é remover a .frame(minWidth: 805, minHeight: 525)linha, mas isso significa que você não pode limitar o tamanho da janela.

Gostaria de ter um tamanho mínimo para meu aplicativo, mas isso defaultSize()não funciona.

enum Page: String, Hashable {
    case settings = "Settings"
    case radio = "Radio"
    case connect = "Connect"
    
    var systemImageName: String {
        switch self {
        case .settings:
            return "gear"
        case .radio:
            return "radio"
        case .connect:
            return "dot.radiowaves.right"
        }
    }
}

struct ContentView: View {
    @State var pages = [Page.settings, Page.radio, Page.connect]
    
    var body: some View {
        NavigationSplitView {
            List(pages, id: \.self) { page in
                Label(page.rawValue.capitalized, systemImage: page.systemImageName)
            }
        } detail: {
            Text("Content")
        }
    }
}

@main
struct NavigationTestsApp: App {
    var body: some Scene {
        Window("Navigation", id: "H") {
            Group {
                ContentView()
                    // Without this line this animation bug does not happen
                    .frame(minWidth: 805, minHeight: 525)
            }
        }
    }
}

Vídeo do bug

swift
  • 1 respostas
  • 65 Views
Martin Hope
CalebK
Asked: 2025-04-10 05:35:15 +0800 CST

É aceitável tornar uma entidade CoreData identificável?

  • 4

Sou novo no CoreData, mas criei um objeto que pretendo usar como uma matriz dentro de um loop ForEach no SwiftUI.

No editor de entidades, adicionei um atributo UUID stored_id. Em seguida, em uma extensão, escrevi isto:

extension Item: Identifiable {
    public var id: UUID {
        guard let stored_id else {
            assertionFailure("No stored ID")
            return UUID()
        }
        return stored_id
    }
    
}

Isso me parece bastante estranho por vários motivos, como o fato de stored_id ser opcional dada a semântica do CoreDatas. Será que isso é uma prática ruim por algum motivo?

swift
  • 1 respostas
  • 16 Views
Martin Hope
CalebK
Asked: 2025-03-09 08:40:02 +0800 CST

Os plugins VSCode sabem como resolver o caminho de importação absoluto, mas o compilador node typescript não

  • 5

Estou tentando seguir algumas das melhores práticas listadas aqui. Quero especificamente ter certeza de que tenho importações absolutas acontecendo. Sou relativamente novo em Node e Typescript e, portanto, espero mover arquivos com frequência conforme avanço.

Portanto, configurei meu tsconfig.jsonarquivo com o sugerido

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    },

Parece que o que ele está fazendo é muito básico. Apenas substituindo "@/*" por um arquivo de caminho de origem absoluto relativo ao nível superior. Dessa forma, a importação não muda com base em onde o arquivo que importa algo está.

De alguma forma, meu código VS parece entender isso. Não tenho certeza de como, mas há um sistema no vscode que funciona de tal forma que, se eu digitar errado uma importação, recebo um erro como este

Falha na importação

Mas se eu digitar corretamente não recebo erro Sucesso na importação

Tenho meus arquivos configurados assim Arquivos configurados assim

No entanto, quando eu executo npm start, é como se a coisa que está sendo executada no terminal estivesse executando uma coisa diferente daquela que está sendo executada no VSCode, porque a substituição parece não funcionar. Recebo um erro:

TS2307: Cannot find module '@/components/WebsiteTitles' or its corresponding type declarations.

Ou

ERROR in ./src/App.tsx 6:0-54
Module not found: Error: Can't resolve '@/components/WebsiteTitles' in '/Users/main/Coding/portfolio-website/src'

Meu host local é um Mac, se isso ajudar.

node.js
  • 1 respostas
  • 34 Views
Martin Hope
CalebK
Asked: 2024-12-27 10:38:35 +0800 CST

O compilador Swift é inteligente o suficiente para evitar avaliar uma declaração de variável let que não seria necessária se uma condição posterior não fosse atendida?

  • 5

Então, por exemplo, este código:

func trigramSimilarity(to other: Set<String>) -> Double {
    let selfTrigram = trigrams()
    let total = selfTrigram.union(other)
    let common = selfTrigram.intersection(other)
    return total.isEmpty ? 0 : Double(common.count) / Double(total.count)
}

Espero que o compilador se transforme em

func trigramSimilarity(to other: Set<String>) -> Double {
    let selfTrigram = trigrams()
    let total = selfTrigram.union(other)
    return total.isEmpty ? 0 : Double(selfTrigram.intersection(other).count) / Double(total.count)
}

Percebendo que let commonnão é necessário que total.isEmptyo compilador Swift me permita escrever código mais simples, mas evite cálculos desnecessários.

Mas é mais seguro ser simplesmente explícito?

swift
  • 1 respostas
  • 61 Views
Martin Hope
CalebK
Asked: 2024-12-23 13:48:43 +0800 CST

Modificar o conteúdo em um popover resulta em uma animação estranha de recarga e rolagem em vez de uma suave

  • 5

Estou tentando fazer um popover cujo conteúdo se expande dinamicamente com base nas escolhas acima. Eu me contentaria com nenhuma animação ou, idealmente, o popover se expandindo gradualmente para seu novo conteúdo, mas, em vez disso, parece que coloquei uma visualização de rolagem no popover e você pode ver o menu recarregar.

Curiosamente, se você fizer a mesma coisa com um botão, apenas modificando uma propriedade de estado, essa animação não acontece.

Imagino que, de alguma forma, esteja confundindo o sistema de animação com IDs não estáveis, mas tentei colocar argumentos .id() em tudo e isso não resolveu o problema.

insira a descrição da imagem aqui

struct DropdownTestView: View {
    @State var presentPopover: Bool = false
    @State var choice: Int = 0

    var body: some View {
        VStack {
            Button {
                presentPopover = true
            } label: {
                Text("Press To Choose")
            }
            .popover(isPresented: $presentPopover) {
                popoverView
                    .padding()
            }
            Spacer()
        }
        .padding()
    }

    var popoverView: some View {
        VStack(alignment: .leading) {
            Divider()

            Menu {
                ForEach(0..<6) { num in
                    Button {
                        choice = num
                    } label: {
                        Text("\(num)")
                    }
                }
            } label: {
                Text("Make A Choice")
            }

            if choice != 0 {
                Divider()
                HStack {
                    Text("WRONG CHOICE")
                }
            }
        }
        .frame(width: 220)
    }
}

Eu tentei algo assim:

HStack {
    Text("WRONG CHOICE")
}
.opacity(choice != 0 ? 1.0 : 0)
.frame(choice != 0 ? 30, 0)

Mas isso também não funciona.

  • 2 respostas
  • 51 Views
Martin Hope
CalebK
Asked: 2024-12-21 12:51:01 +0800 CST

Uma View que recebe um maxWidth automaticamente ocupa o maxWidth do espaço. Existe uma maneira de fazer com que ela ocupe apenas o necessário?

  • 5

Estou tentando criar botões que cresçam até uma largura máxima, se necessário, em que ponto eles usam "..." para truncar seu título. Sei que há algumas coisas incomuns sobre quadros de botões, como a diferença em aplicar quadro antes ou depois, .buttonStyleno entanto, esse comportamento é surpreendente para mim.

Parece que aplicar o maxWidthfaz o botão ocupar essa largura mesmo que não precise. Se você aplicar um estilo de botão que dê a ele um plano de fundo, ele teria espaço em branco ao redor do botão.

Descobri que isso Text()também se aplica a.

struct TestButton: View {
    let title: String

    var body: some View {
        Button {
            print(title)
        } label: {
            Text(title)
                .lineLimit(1)
        }
        .frame(maxWidth: 180)
        .background(.purple)
        .buttonStyle(PlainButtonStyle())
        .focusable()
    }
}
HStack {
    TestButton(title: "Bears")
    TestButton(title: "Battlestar Galactica")
}

insira a descrição da imagem aqui

swiftui
  • 1 respostas
  • 21 Views
Martin Hope
CalebK
Asked: 2024-12-20 18:15:01 +0800 CST

Matriz com elemento de tipo genérico não pode ser usada em ForEach `Não é possível converter o valor do tipo '[C]' para o esperado...`

  • 6

Imagino que se o erro fosse mais útil isso seria óbvio, mas por enquanto esse é o código que estou tentando compilar.

struct MultiselectFilterDropdown<C>: View where C : Identifiable, C.ID : Equatable, C.ID : CustomStringConvertible {
    var allItems: [C]

    var body: some View {
        VStack {
            ForEach(allItems) { item in
                Text(item.description)
            }
        }
    }
}

E eu não sei por que o compilador não consegue resolver isso. Eu vi ele dizer que não consegue converter para Range<Int>ou Binding<C>então eu estou supondo que o compilador nem sabe qual inicializador de ForEach seria mais relevante.

swift
  • 1 respostas
  • 25 Views
Martin Hope
CalebK
Asked: 2024-11-09 05:41:32 +0800 CST

Livre-se do efeito de vibração colocado atrás dos cabeçalhos de lista, dado o estilo .plain no iPad

  • 5

Estou usando uma Lista para uma interface altamente personalizada. Isso ocorre principalmente por causa do headercampo e como no .plainmodo os cabeçalhos são fixos acima do conteúdo.

O problema é que os cabeçalhos parecem ter um efeito de vibração. Isso é indesejável porque, nesse caso, o cabeçalho deveria ser apenas um único botão à esquerda.

Existe alguma maneira de me livrar desse efeito de vibração? Ou devo construir minha própria implementação de cabeçalho fixo com alguma lógica complicada de leitor de geometria?

Efeito de vibração do cabeçalho fixo

swiftui
  • 2 respostas
  • 18 Views
Martin Hope
CalebK
Asked: 2024-10-29 08:29:44 +0800 CST

Salvando um ShapeStyle em uma variável no Swift

  • 5

No meu aplicativo, tenho uma variedade de botões. Eles compartilham muitas qualidades, mas variam em cor. Estou tentando escrever uma classe que englobe cada um dos ButtonStyles, deixando claro que a única coisa que varia são suas cores.

O problema é que eu também gostaria de poder usar .tint para um deles. Mas isso é um ShapeStyleem vez de uma Cor.

struct CommonButtonStyle: ButtonStyle {
    @Environment(\.isEnabled) var isEnabled: Bool
    
    @Environment(\.isFocused) var isFocused: Bool
    
    var labelColor: Color
    
    var enabledColor: some ShapeStyle
    var pressedColor: Color
    
    func makeBody(configuration: Configuration) -> some View {
        configuration.label
            .font(.system(size: 14, weight: .bold))
            .padding(.horizontal, 16)
            .padding(.vertical, 10)
            .foregroundStyle(labelColor)
            .frame(maxHeight: 40)
            .background((isEnabled && configuration.isPressed) ? pressedColor : enabledColor)
            .clipShape(Capsule())
            .containerShape(Capsule())
            .opacity(isEnabled ? 1 : 0.5)
            .focusable()
    }
}

O problema aqui é a incompatibilidade dos tipos de retorno e a declaração de var enabledColor: some ShapeStylecomo o compilador reclama queProperty declares an opaque return type, but has no initializer expression from which to infer an underlying type

Existe uma maneira de fazer com que essa variável armazene a Colorou a ShapeStylepara que eu possa fazer

CommonButtonStyle(labelColor: .black, enabledColor: .tint, pressedColor: .white)

e

CommonButtonStyle(labelColor: .black, enabledColor: .blue, pressedColor: .white)
swift
  • 2 respostas
  • 46 Views
Martin Hope
CalebK
Asked: 2024-10-24 09:30:40 +0800 CST

Colocar visualizações dentro de uma lista impede que matchedGeometryEffect anime a geometria correspondente entre os estados

  • 5

Tenho uma animação bem simples que estou tentando fazer, onde o item selecionado em uma lista recebe um plano de fundo aplicado. O objetivo é que a caixa cinza atrás do item selecionado se transforme da posição anterior para a próxima suavemente.

Eu consegui isso usando matchedGeometryEffectpara que o SwiftUI pudesse combinar as visualizações de fundo entre os dois estados, embora tecnicamente eles tenham um caminho de ID diferente. No entanto, esse esforço é frustrado porList

Aqui está o projeto de exemplo. Tudo o que você precisa fazer para quebrar a animação é cercar os botões em uma List.

Por que List quebra essa animação? Existe alguma maneira de contornar isso?

struct AnimationButtonStyle: ButtonStyle {
    
    var isCurrent: Bool
    var animationNamespace: Namespace.ID
    
    var backgroundView: some View {
        Color.gray
        .cornerRadius(8)
        .matchedGeometryEffect(id: "Shape", in: animationNamespace)
    }
    
    func makeBody(configuration: Configuration) -> some View {
        configuration.label
            .background(
                isCurrent ? backgroundView : nil
            )
            .opacity(configuration.isPressed ? 0.5 : 1.0)
    }
}

struct ContentView: View {
    enum cases: String, CaseIterable {
        case foo = "Foo"
        case bar = "Barrrrrr"
        case bat = "Battttttttttttttt"
    }
    
    @Namespace private var animationNamespace
    @State var animatedCurrentCase: cases = .foo
    @State var currentCase: cases = .foo
    @State var isAnimating: Bool = false
    
    var body: some View {
        VStack {
            // Without the list this animation will work
            List {
                Section {
                    VStack(alignment: .leading, spacing: 0) {
                        ForEach(Array(cases.allCases.enumerated()), id: \.offset) { index, theCase in
                            var isCurrent: Bool { theCase == animatedCurrentCase }
                            Button {
                                isAnimating = true
                                Task { @MainActor in
                                    animatedCurrentCase = theCase
                                    try? await Task.sleep(nanoseconds: 200_000_000)
                                    currentCase = theCase
                                    isAnimating = false
                                }
                            } label: {
                                Label {
                                    Text(theCase.rawValue)
                                } icon: {
                                    VStack(alignment: .leading) {
                                        Text("\(index)")
                                    }
                                    .frame(width: isCurrent ? 16 + 4 : 16)
                                }
                            }
                            .disabled(isAnimating)
                            .buttonStyle(AnimationButtonStyle(isCurrent: isCurrent, animationNamespace: animationNamespace))
                            .animation(.smooth, value: animatedCurrentCase)
                        }
                    }
                }
            }
            Spacer().frame(height: 10)
            Text("Selected: \(currentCase.rawValue)")
                .font(.title)
        }
        .padding()
    }
}

Aplicativo de amostra

animation
  • 2 respostas
  • 37 Views
Martin Hope
CalebK
Asked: 2023-10-06 23:01:12 +0800 CST

É seguro comparar a igualdade de Date.now em uma instrução de uma linha

  • 8

Estou tentando escrever uma linha que avalia um bool que diz se um objeto Date opcional está no futuro ou não.

Eu escrevi a seguinte declaração

let dateIsInFuture = (optionalDate ?? .now) >= .now

E estou curioso para saber se isso é ruim. Especialmente porque se o primeiro e o segundo .now forem avaliados em momentos diferentes, podem deixar de ser iguais. É claro que posso usar agora uma linha diferente para remover essa ambigüidade... mas estou curioso para saber se isso funcionaria com a maneira como o Swift compila e executa essa linha de código.

swift
  • 2 respostas
  • 43 Views
Martin Hope
CalebK
Asked: 2023-09-19 20:04:08 +0800 CST

Como atualizar um AsyncImage que aponta para o mesmo URL

  • 5

Tenho visto muitas perguntas sobre o AsyncImage e como atualizá-lo. Neste caso é um pouco diferente. O URL da imagem permanece o mesmo, mas a imagem muda periodicamente. Como tal, eu esperava ter um botão para atualizá-lo.

O problema é oldUrl == newURL. Eu até tentei alguns dos truques em que você define a cor da borda em um pai para tentar enganar o SwiftUI para atualizá-lo e nada disso funcionou. Por enquanto estou mostrando e ocultando manualmente a visualização para que isso funcione. É claro que isso é indesejável.

Poderia haver alguma outra maneira?

swiftui
  • 1 respostas
  • 12 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve