iToverDose/Yazılım· 1 MAYIS 2026 · 20:03

iOS 26 Sıvı Cam Düğmeleri: Dokunmaları Yutan Gizli Hata

iOS 26'deki yeni Sıvı Cam efektini kullanan uygulamalarda karşılaşılan beklenmedik bir hata, komşu düğmelerin dokunuşlarını sessizce engelleyebiliyor. İşte bu sorunun nedeni ve basit çözümü.

DEV Community2 dk okuma0 Yorumlar

iOS 26’nin tanıtımıyla birlikte SwiftUI geliştiricileri, kullanıcı arayüzlerine yeni bir estetik katmak için .glassEffect() API’sini kullanmaya başladı. Ancak, bu yeni özellik beklenmedik bir davranışla karşılaşmanıza neden olabilir: komşu düğmelerin dokunuşlarını sessizce yutan bir hata.

Bir geliştirici, giriş ekranında dikey olarak sıralanmış iki düğmenin yalnızca ilkine yanıt verdiğini fark etti. İkinci düğmenin dokunuşları hiçbir hata mesajı veya uyarı vermeden kayboluyordu. Peki, bu sorunun kaynağı neydi ve nasıl çözülebilirdi?

Deneyimin Arka Planı

Geliştirici, giriş ekranında iki düğmenin yer aldığı basit bir düzen oluşturdu. Düzen, standart bir VStack kullanılarak oluşturulmuş ve düğmeler arasında 26 nokta (pt) boşluk bırakılmıştı. Kod şu şekildeydi:

VStack(spacing: 26) {
    Spacer()
    Button {
        store.send(.signupButtonTapped)
    } label: {
        Text("Sign Up")
            .padding()
            .frame(width: buttonWidth, height: 55)
    }
    .glassEffect(.clear.interactive())
    .buttonStyle(.plain)
    
    Button {
        store.send(.loginButtonTapped)
    } label: {
        Text("Log In")
            .padding()
            .frame(width: buttonWidth, height: 50)
    }
    .glassEffect(.clear.interactive())
    .buttonStyle(.plain)
}

İlk bakışta, her iki düğmenin de aynı şekilde tanımlandığını görüyorsunuz. Ancak, yalnızca Sign Up düğmesi çalışıyordu. Log In düğmesine yapılan dokunuşlar hiçbir tepki vermiyordu.

Sorunun Kaynağı: Sıvı Cam’ın Birleşme Davranışı

iOS 26’nin Sıvı Cam sistemi, .glassEffect(.clear.interactive()) çağrısı yaptığınızda varsayılan olarak dikdörtgen bir cam plaka oluşturur. Eğer bu cam plakalar birbirine çok yakınsa, sistem otomatik olarak onları tek bir etkileşim grubuna birleştirir. Bu birleştirme, kullanıcı arayüzüne daha akıcı bir görünüm kazandırmak amacıyla tasarlanmış olsa da, dokunuş yönetiminde beklenmedik sonuçlara yol açabilir.

Birleştirme işlemi gerçekleştiğinde, .interactive() jest işleyicisi, dokunuşları hiyerarşideki ilk görünüme yönlendirir. Bu durumda, Sign Up düğmesi hiyerarşide daha üstte olduğu için, Log In düğmesine yapılan tüm dokunuşlar sessizce tüketilir ve düğmenin eylemi hiçbir şekilde tetiklenmez.

Bu davranış, hata ayıklama sürecini son derece zorlaştırır. Çünkü sistemde herhangi bir hata mesajı veya uyarı görülmez; sadece kullanıcıların belirli bir düğmenin çalışmadığını bildirmesiyle sorun ortaya çıkar.

Çözüm: Cam Şeklini Belirginleştirin

Sorunun üstesinden gelmek için, .glassEffect() çağrısında camın şeklini açıkça belirtmeniz gerekir. Bu, sistemin düğmeleri ayrı etkileşim grupları olarak tanımasını sağlar. Örneğin:

// Önceki (hatalı) versiyon
.glassEffect(.clear.interactive())

// Düzeltme (çalışır versiyon)
.glassEffect(.clear.interactive(), in: .capsule)

Bu tek değişiklik, sorunun çözülmesi için yeterli olacaktır.

Yeniden Kullanılabilir Bir Düzenleyici Oluşturmak

SwiftUI geliştiricileri, genellikle cam efektlerini ViewModifier kullanarak yeniden kullanılabilir hale getirir. Bu yaklaşımı benimsiyorsanız, cam şeklini de bu düzenleyiciye dahil etmeyi unutmayın:

struct GlassButtonModifier: ViewModifier {
    func body(content: Content) -> some View {
        if #available(iOS 26.0, *) {
            content.glassEffect(.clear.interactive(), in: .capsule)
        } else {
            content
                .background(.ultraThinMaterial, in: Capsule())
        }
    }
}

Bu düzenleyiciyi kullanarak, hem iOS 26 hem de önceki sürümlerde tutarlı bir görünüm elde edebilirsiniz.

Hangi Durumlarda Dikkatli Olmalısınız?

Bu sorun aşağıdaki durumlarda ortaya çıkabilir:

  • İki veya daha fazla .glassEffect() kullanılan görüntü, birbirine yakın olduğunda (örneğin, VStack, HStack veya ZStack içinde).
  • .interactive() jest işleyicisi kullanıldığında.
  • Cam şekli, .glassEffect() çağrısında açıkça belirtilmediğinde.

Bu durum özellikle tehlikelidir, çünkü ilk düğmenin her zaman çalışması, sorunun erken tespit edilmesini engelleyebilir. Kullanıcıların belirli bir düğmenin çalışmadığını bildirmesiyle karşılaşana kadar sorunu fark etmeyebilirsiniz.

Sonuç: İyi Alışkanlıklar Edinin

iOS 26’nin Sıvı Cam sistemini kullanırken, komşu düğmelerin dokunuşlarını yutmasını önlemek için her zaman cam şeklini açıkça belirtin. Bu basit adım, geliştirme sürecinizi daha sorunsuz hale getirecek ve kullanıcı deneyimini iyileştirecektir.

Gelecekteki projelerinizde bu hatanın tekrar yaşanmaması için, her zaman .glassEffect() kullanırken in: parametresiyle cam şeklini belirtin. Bugün atacağınız bu basit adım, ileride size ve ekibinize büyük kolaylık sağlayacaktır.

Yapay zeka özeti

iOS 26'deki Sıvı Cam efektini kullanırken karşılaşılan beklenmedik bir hata, komşu düğmelerin dokunuşlarını sessizce yutabilir. Bu sorunun nedenini ve basit çözümünü öğrenin.

Yorumlar

00
YORUM BIRAK
ID #N5ATQP

0 / 1200 KARAKTER

İnsan doğrulaması

7 + 3 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.