iOS 26 ile Gelen 7 ViewModifier — SwiftU
iOS26 ile küçük ama etkili kullanım alanları olan, işleri kolaylaştıracak ViewModifier’lar oyuna dahil oldu. İlk bakışta “detay” gibi…
iOS 26 ile Gelen 7 ViewModifier — SwiftU

iOS26 ile küçük ama etkili kullanım alanları olan, işleri kolaylaştıracak ViewModifier’lar oyuna dahil oldu. İlk bakışta “detay” gibi görünen bu yeni modifier’lar pek çok noktada SwiftUI kodunu hem sadeleştiriyor hem de ortaya çıkan kullanıcı deneyimini daha native hale getiriyor.
Eğer Medium Member değilseniz yazının tamamını buradan ücretsiz olarak okuyabilirsiniz.
Önceden ekstra state’ler, custom wrapper’lar ya da UIKit köprüleriyle çözdüğümüz bazı problemler artık tek satırlık modifier’larla halloluyor. Bu yazıda, iOS26 ile gelen ve günlük projelerde gerçekten fark yaratan 7 ViewModifier’a yakından bakacağız.
1- sliderThumbVisibility(visibility: Visibilty)
Bir native component olan Slider SwiftUI’da kullanıcı etkileşimli ekranlarda sık kullandığımız kontrol elemanlarından biri olsa da, her senaryoda klasik “thumb” görünümü ideal olmayabiliyor.
Özellikle medya kontrolleri, progress odaklı etkileşimler ya da daha minimal arayüzlerde slider’ın sadece bir değer göstergesi gibi davranmasını isteyebiliyoruz. iOS 26 ile gelen sliderThumbVisibility modifier’ı, tam da bu noktada devreye girerek slider’ın görsel davranışını senaryoya göre daha esnek ve kontrollü hale getiriyor.
struct SliderTest: View {
@State private var progress: CGFloat = 0.5
var body: some View {
Slider(value: $progress)
.padding(.horizontal, 16)
}
}
ve buraya ek olarak sliderThumbVisibility modifier’ını eklersek
.sliderThumbVisibility(.hidden)
Ardından modifier eklemeden önce ve ekledikten sonraki halini ekranda görebilirsiniz. Bu modifier sayesinde slider’ı artık düz bir progress view olarak kullanabilmek de mümkün.

2- safeAreaBar(edge:alignment:spacing:content:)
Safe area kavramı SwiftUI’da uzun süredir bildiğimiz bir kavram olsa da, özellikle ekranın altına ya da üstüne sabitlenen aksiyon alanlarında hâlâ ekstra düzenlemeler yapmamız gerekebiliyordu. ScrollView ile birlikte çalışan, içerikle uyumlu hareket eden ve sistem bar’larıyla görsel olarak çakışmayan bir yapı kurmak çoğu zaman safeAreaInset ve custom çözümlerle mümkün oluyordu. iOS 26 ile gelen safeAreaBar modifier’ı, bu ihtiyacı çok daha doğal ve sistemle uyumlu bir şekilde ele alarak “sticky” bar kullanımını SwiftUI tarafında developer’a kolaylık sağlıyor.
Aslında safeAreaInsets modifier’ına benzer şekilde çalışır, ancak düz şeffaf bir arka plan yerine hem progressive (aşamalı) hem de hard (keskin) blur seçenekleri sunar. Blur efekti ve görünürlüğü scrollEdgeEffectStyle modifier’ı ile kontrol edilebilir.
struct SafeAreaBarTest: View {
var body: some View {
NavigationStack {
List {
ForEach(1...20, id: \.self) { index in
Text("\(index). Item")
}
}
.safeAreaBar(edge: .bottom) {
Text("Hello, This is Bottom Bar!")
.padding(.vertical, 15)
}
.scrollEdgeEffectStyle(.soft, for: .bottom)
//.scrollEdgeEffectStyle(.hard, for: .bottom)
}
}
}
Ardından ekranlarımız aşağıdaki gibi olacaktır. Effect style olarak .soft ve .hard tercih edilebilir.

3- onOpenURL(prefersInApp:)
iOS 26’dan önce, SwiftUI’da kullandığımız Link view varsayılan olarak verilen URL’i Safari uygulamasında açıyordu. Bu davranışı değiştirmek istediğimizde ise genellikle SFSafariViewController gibi UIKit tabanlı çözümlere başvurmak zorunda kalıyorduk. iOS 26+ ile birlikte bu ihtiyaç çok daha sade bir şekilde ele alınıyor: openURL environment property’sinde prefersInApp değerini true olarak ayarlayarak, linkleri artık doğrudan Uygulama İçi Web Tarayıcı üzerinden açabiliyoruz. Böylece hem kullanıcıyı uygulama dışına çıkarmadan akışı koruyoruz hem de link açma davranışını SwiftUI’ın deklaratif yapısı içinde, tek bir modifier ile kontrol edebiliyoruz.
struct OpenURLTest: View {
@Environment(\.openURL) var openURL
var body: some View {
let website = URL(string: "https://hasanalidev.medium.com")!
VStack {
// Eski stil
Link(destination: website) {
Text("Hasan Ali Medium Website")
}
Button("Hasan Ali Medium Website") {
openURL(website, prefersInApp: true)
}.buttonStyle(.borderedProminent)
}
}
}
İnceleyecek olursak:

4- Close Role for Button
iOS 26+ ile birlikte SwiftUI’da .close ve .confirm adında yeni bir buton rolü oyuna dahil oluyor. Artık modal ya da sheet tabanlı ekranlarda kapatma aksiyonunu tanımlamak için özel bir label oluşturmaya gerek kalmıyor. Button(role: .close), özellikle toolbar içinde kullanıldığında, sistem tarafından otomatik olarak X işareti ve cam efekti (glass effect) ile stilize edilmiş bir kapatma butonu oluşturuyor.
struct CloseRole: View {
@State private var showSheet: Bool = false
var body: some View {
Button("Show Sheet") {
showSheet.toggle()
}
.sheet(isPresented: $showSheet) {
NavigationStack {
VStack {
}
.navigationTitle("Info")
.toolbar {
ToolbarSpacer(.flexible, placement: .topBarTrailing)
ToolbarItem(placement: .topBarTrailing) {
Button(role: .close) {
showSheet = false
}
}
}
}
.presentationDetents([.medium])
}
}
}

5 ve 6- GlassButtonStyle ve buttonSizing(_ sizing: ButtonSizing)
iOS 26.1 gerekir!
iOS 26 ilk yayınlandığında SwiftUI tarafında iki temel cam buton stili vardı: .glass ve .glassProminent. İkisi de “klasik” cam efektini veriyordu; ancak şeffaf (clear) bir cam görünümü veya daha renkli/tinted bir cam efekti istediğimizde, bunu elde etmek için genellikle ekstra katmanlar ekleyip özel bir buton view’i üretmemiz gerekiyordu. İşte iOS 26.1+ ile burada güzel bir kırılma geliyor: GlassButtonStyle sayesinde cam efektinin varyasyonlarını çok daha kolay ve “native” şekilde yönetebiliyoruz.
Bu görsel kontrolün yanına bir de yerleşim tarafını ekleyelim: iOS 26 ile gelen buttonSizing modifier’ı sayesinde butonun tüm mevcut alanı kaplamasını (stretch) ya da yalnızca label boyutuna sığmasını (fit) tek satırla belirleyebiliyoruz. Üstelik bu davranış sadece düz metin butonlarda değil, özel label (ikon + metin, HStack/VStack vb.) kullandığımız senaryolarda da sorunsuz çalışıyor. Böylece butonun hem stili (glass / tinted / clear) hem de layout davranışı (fit / stretch) SwiftUI içinde deklaratif şekilde netleşmiş oluyor.
struct GlassButtonTest: View {
var body: some View {
ZStack {
Image(.BG)
.resizable()
.aspectRatio(contentMode: .fill)
.ignoresSafeArea()
VStack {
Button("Glass Button") {
}
.fontWeight(.bold)
.foregroundStyle(.white)
.buttonStyle(GlassButtonStyle(.clear))
.buttonSizing(.flexible)
.font(.title)
}
.padding()
}
}
}
Ekranımızda böyle gözükecek:

7- searchToolbarBehavior(_:)
Arama deneyimi, özellikle liste ve içerik yoğun ekranlarda kullanıcıyı en hızlı sonuca götüren kritik bir parça. SwiftUI’da .searchable uzun süredir hayatımızda olsa da, arama alanının toolbar içindeki davranışı çoğu zaman sınırlıydı; özellikle navigation bar kalabalıklaştığında arama çubuğu ya fazla yer kaplıyor ya da tasarımın ritmini bozuyordu.
Peki Tab Bar’dakine benzer şekilde, odaklanmadığında küçülen / daha minimal görünen bir arama çubuğuna sahip olmak istesek ne olur? iOS 26 ile gelen searchToolbarBehavior modifier’ı tam da bu senaryo için devreye giriyor. Arama alanının toolbar’da nasıl sunulacağını (ör. odaklanmadığında daha kompakt, gerektiğinde genişleyen bir davranış) deklaratif şekilde tanımlayarak daha temiz bir UI ve daha odaklı bir kullanıcı deneyimi yakalayabiliyoruz.
struct SearchToolbarBehaviorTest: View {
@State private var searchText: String = ""
var body: some View {
NavigationStack {
List {
Text("User 1")
Text("User 2")
Text("User 3")
}
.navigationTitle("Search Users")
.searchable(text: $searchText)
.searchToolbarBehavior(.minimize)
.toolbar {
ToolbarSpacer(.flexible, placement: .bottomBar)
DefaultToolbarItem(kind: .search, placement: .bottomBar)
}
}
}
}
.searchToolbarBehavior(.minimize) kullanmadan önce ve sonra ekranımızı aşağıda görebilirsiniz.

BONUS Kodu eğer simulatorunuzde çalıştırdıysanız fark ettiğiniz gibi, arama çubuğu aktif olduğunda, navigasyon başlığı görünmez hale geliyor. Eğer başlığı gizlemek istemiyorsanız, bunu önlemek için .searchPresentationToolbarBehavior(.avoidHidingContent) modifier’ını kullanabiliriz!
NOT: Bu bir iOS 26 modifier’ı değildir, iOS 17.1 ve sonraki sürümlerde kullanılabilir!
iOS 26 ile gelen bu yeni ViewModifier’lar, SwiftUI’da “küçük dokunuşlarla büyük farklar” yaratmanın ne kadar mümkün olduğunu net bir şekilde gösteriyor. Tek tek bakıldığında basit gibi duran bu eklemeler, bir araya geldiklerinde daha temiz kod, daha az özel çözüm ve sistemle birebir uyumlu bir kullanıcı deneyimi sağlıyor. Özetle; iOS 26, SwiftUI geliştiricilerini daha fazla kontrolle değil, daha doğru varsayılanlarla güçlendiriyor ve bizi, Apple’ın kendi uygulamalarında gördüğümüz o rafine deneyime bir adım daha yaklaştırıyor.
İyi Kodlamalar!
메타데이터
- post_id
- ebe6d60ae8cd
- slug
- ios-26-ile-gelen-7-viewmodifier-swiftu-ebe6d60ae8cd
- url
- https://medium.com/@hasanalidev/ios-26-ile-gelen-7-viewmodifier-swiftu-ebe6d60ae8cd
- canonical_url
- https://medium.com/@hasanalidev/ios-26-ile-gelen-7-viewmodifier-swiftu-ebe6d60ae8cd
- author_url
- https://medium.com/@hasanalidev
- status
- ok
- fetched_at
- 2026-08-08 00:02:55