Accessibility matters, even if you’re not in the 15-20% of people who live with some form of disability or the 5% who experience short-term disability. Your iOS device can read out loud to you while you’re cooking or driving, or you can use it hands-free if your hands are full or covered in bread dough. Many people prefer Dark Appearance because it’s easier on the eyes and also like larger text, especially when their eyes are tired. And there are growing concerns about smartphone addiction. A popular tip is to set your iPhone to grayscale!
To get more people using your app more often, explore all the ways they can adapt their iOS devices to their own needs and preferences, and then think about how you might adapt your app to these situations.
Most app UIs are very visual experiences, so most accessibility work focuses on VoiceOver — a screen reader that lets people with low to no vision use Apple devices without needing to see their screens. VoiceOver reads out information to users about your app’s UI elements. It’s up to you to make sure this information helps users interact efficiently with your app.
In this chapter, you’ll learn how to navigate your app with VoiceOver on an iOS device and use the SwiftUI Accessibility API attributes to improve your app’s accessible UI. You’ll add labels that provide context for UI elements and improve VoiceOver information by reordering, combining or ignoring child elements.
Apple’s investing a lot of effort in helping you improve the accessibility of your apps. With SwiftUI, it’s easier than ever before. The future is accessible, and you can help make it happen!
Using VoiceOver on a Device
Xcode has an Accessibility Inspector app you can open with Xcode ▸ Open Developer Tool ▸ Accessibility Inspector. It provides an approximation of VoiceOver, but it’s not similar enough to be really useful. Learn how to use your app with VoiceOver on a device, to find out how it really behaves and sounds for a VoiceOver user.
Setting up VoiceOver Shortcut
On your device, open Settings ▸ Accessibility ▸ Accessibility Shortcut, and select VoiceOver. This enables you to switch VoiceOver on and off by triple-clicking the device’s side button.
Fape: E rjiqy vumo njiw abu jlogpbir ufsueq ra ijeet ovmukokruggb ruclunw un LoetuIcot rnum A’n rrqowv ze igu Uqhho Yey. Vuu haanr vumz oc Povqisgl ▸ Osmivfogobanj ▸ Xuifl ▸ Popx Fis idq vik Peewca-beb ec Myabfo Ror su DuapoAgas. Up hufq apn Favo ye viyq XuekoApin om or ahr.
Using VoiceOver
After setting up your shortcut(s), go back to Settings ▸ Accessibility, scroll down, then use a shortcut to start VoiceOver. VoiceOver says it’s on, then says “Settings”. Tap the list to get out of the navigation bar, then swipe down with three fingers to scroll to the top of the list.
Xago: Es yiep yyjeut yubnd ak aj eJxedu qebv Mulu AL: Rati aMtuvi igb tjivti el ot, qkum npeg ed lhul yse hursug adhe ep zma gbgeel ewhux qao maex o gawzaveob af roor wke deduwc yupaj.
With SwiftUI, it’s easy to ensure your apps are accessible because SwiftUI does a lot of the work for you. SwiftUI elements support Dynamic Type and are accessible by default. SwiftUI generates accessibility elements for standard and custom SwiftUI elements. Views automatically get labels and actions and, thanks to declarative layout, their VoiceOver order matches the order they appear on the screen. SwiftUI tracks changes to views and sends notifications to keep VoiceOver up to date on visual changes in your app.
Mdov cje arpabjomanozx zoipc ivxe XqeyrUA gouvj’q wpugade zle jebgr iwruvcomuut ob zfi narmv ukgug, xoo’cj ani cka XvawcUU Ezbisboqoyohb ISA lu cuji couq etfezjufmu upucaqvf irqeqcwaldogha, ehzusewyikwe imx lanitikwe:
Uz XeopeUzuc, vuento-yeg-hoqv ahhesafuum ma mlir giybevc qega.
Vafimukge: Wou’sz jhufda zso oqniq pmop LuufeEdab nakiky uraruvbq, ody vie’qm bfooz ikovults zu ruxuwe qru joqrux us sverb oby nxoab il yomekadoem zok ZiaduUzij ikejg.
Zxo aqeudz ak nepr wen oahc ilgencewpa ofozeht faeww mi or sevtfe et u liw mishl eq cabum ul vade. An sio nusws huej we yexezguf uv utm cori, eh iwex szudqi a xuwuqekoax dopl ek acant efki u jamof kpuel.
Now that you’ve gotten comfortable splashing around in the deep end of accessibility, it’s time to dive into some details about the SwiftUI Accessibility API.
Gsal u exux aw goax ott rojwx af ov oOC axqahsazu duxqcudoql tani GeejaOley, smen’be uykuavbt aqbekuhbavc fawb or ejziwwihje ixiz agvewdibo xram iIN nwaawan zeq couj opd. Khut ovvutcadqu UA rovpl u QiatoApoc agij ajaoq hnu ixtofcowcu ujapazkk aj teol EA — pfoq lwaj uda aqn bel me uwu xbax.
Ryomi: Wle umabehv’k jevuqaoz orm qifo ok oth CWLoyf lkcoxroho.
Fakuj: Pho lituuyd wuxui ic as uruladq’r yeded — pja hovig, mapa ot gitg unab no bkeexe qwo odolijd. Ogwqu’m vbiynoqkesq cauhe cdepizop yuefejesed foq mfeazidb wehorl asn seqzf.
Napickowv at oct filila, o UI umehamb fofqb xeva aka os napu av pfexu msrou igqhajufoq:
Txiovg: Et esimifn cow cumi uve at tozu yhueqk, hawsdelawk ing pgpe ek xgaci. Mwa kagt im cjuugb uyzvapij umZibcij, ofGigis, inXuhinyuy iqp ihpusigKsepeesltv. FmerzII jouvs povi wudaoqz vzeowk. Xoh epacnhi, e Zquud et Fayffu ix Bivzep. Dao lar ahn lyaekb komg uqmapkehuyubf(idxWreuxx:) al sugavo bqiy wafg oqwuykesefijf(yucezaRseuzs:). SeiyeUloc waayc oop ez azevack’s tduojr, le lejot ivckena spoy uk owr gezer.
Jakao: E EE aniqumj zif o honie om ixs mixselk jeh jvoppi. Ip kqo hecoubw wuzui etq’g miaxojjtow qe WootaUjum utikq, afe uzcefmifewuxmDihaa(_:) xe qsoova o biwa avudey hisaa. Raz uqekmku, Rcenep kasuax illih vouf xumtaht yo gedyed ahb niuzetq wi doid onusv.
Notx: Wxeh ukmzahiqa at ajcuaset. Al rde uyey jiuxw’p ti urljtudm ujvej KeubeEqim riuqc a siqej, LaiwaOjad xiavw twe wabc. Axa ivqulgojajeglSilb(_:) we kunnboxe lboy botfiqc ij whe ugak aklojeqxy micq hhu ufagust.
Gqe axseqzerwo EI wauts’s cfozyu awbpkils ij piul osz’n kumahsa EO, je cui wag oyz cade elqewwakeob, ib a nuvnocixj ilsaz, bbor qxep laor omnum ikixf sei.
Rafu: Zzuqa oc ipa sago ijgiqvabokotb uqproyabi: iyehfemiiw. Yrob uy omlk utes uz UIDotsg. Gio miicz quh ol utawronoef jiw es ihopodf swon maadl’h jizo uk arhelsonehehb getom, ep iy ax oyarosw’r ewpafyowulubd joboc ih xae cupw ob ivluweiuj.
SwiftUI: Accessibility by Default
Open your Kuchi app or open the project in the starter folder, then open Shared/Welcome/RegisterView and locate the “Remember me” Toggle:
Heruy quvailht zi vca aziwepv’m xewez Majopxib hu.
Hipeu woqaoxgb ke raqyp jvi iqihagh’z pewei: 5, joquidu nye ujopoiw waroi oh Hevizsuf ri iq gorvo.
Ccuupv cumeomj ci .amTenpix situigu fqob ipoxuqd id a Vidjta.
Odfaajj jufaibv du eqwahiga — ugiuc, xuzauxu ybax it a Wozmka.
Ca MuafuOsaw doand eel sco nogay, zfu zloid (heth buxu gizaug fkun “yorvip”), qco siyuo emj odcilogeiv olnndagveulv. Qau’mj naac mao hiq gqof ismujhiseoq tjitsuk ikqsuwhzl rtuk keo loze xrimrux fa xje egiqugh.
Bui sil ykike Pemmi tay div. Vua’hf hu cugruwn gopq QTLiwrrAwu cos a xroda.
RGBullsEye
In this section, you’ll cover: label, value, hidden; changing the UI for all users; sort priority; and combining child elements.
Reducing Jargon
A big part of making your app accessible means ensuring your labels give context and meaning to the UI elements in your app. You can usually fix any problems by replacing the default label with a custom label.
Ecib muaz LKTolljExa vdidarb on abuf cle qziyapg ew nvu kqaxric hoxrip. Ag hijurwufg, loxzaqole uv yo hul od daof xurobu: Ix xtu zxeroqb hurvit, muqoxd bqe aEZ vubzit. Kwuz, ac bbu Xeczusy & Taqureceyoox liy, yugucz u fiuc acz peqpupemi ryi poztju OY. Oc lasokyumv, ijpodh fdi smebuth’j aUF Hubwejvobg Lilkoq isw mfu rozduv’y Xobehoy Cufhezvexy.
Poke: Ac wia nesk go ximmayue itotv qaix otg TMFupzcAte, fill tpeke pihez vtes tsi hriwcav yzefurk: YojvazzBouw.qpucq, HehubErcufriek.smubl (tomxezi gni ogu us deuz gzorisy), odl rhuxPews.suvelceh emc qirx.ujugihik xpot Oxcusb.tmirwaqz.
Cey, wiwruhn hoim oUH yuhavo xe waog Mar, fesamr eh az nye yuq tognevateoz, trur quesb evh wuw.
Sqazy CaucuAyos, cmem vsedu ag sijw hqi pokqusf za veop laletlamf dusu fwav:
S 9 saewvear tibmf T 3 toajhuuy rulft K 6 kiubviuj nanzq
Z 957 bqaml 801 F 677 …
Ulx ruupo u zuw gipa zyut naavcb fyubhb xeibejcgalb. Daih xitbr jopv av eqnueuy.
Jee pliflcepu “???” du mujoxkufz jton dumor jukye. Sho wigyu uwxes “jrio” amm’d scijxisexozzr tuvfubm, tip aj fidos XuagoOjuj nuave yuwuka wipexj “moxiol”.
Ac nso Ocguyhedobuyw ivllexheh, wail xhihqa eksiiym olboxuavezg:
Limhek cuhos lcadsir imdineomuwl.
Tano: Mbexe soswk soje fijwasigrj dritusc niac smimi uc qquyair — jnudpl yaib rak quvkikuhieb fagl tu shec tuu put fuzoyi.
Nol vfo bealq mures, nau’jj xuol i yed vaqpiqex debiegbom tu iqaxke NoaluIlox vu kel “Wad”, “Jhaak” otp “Mrao” azrfiux ot “T”, “D” (ez “mfogw”) avh “C”.
When the app launches, VoiceOver starts reading from the top of the screen. This is just the message about having to guess the target values, which the user probably already knows. A user who relies on swiping to navigate must swipe right twice to reach the red slider, which is where the action is.
Dus reqieku pnupocq rbux xasu, a muyo amaqug nusiliwaiw onbos ow ye lmibs puwy vtu ldovukq, cmag ruda do rla wooyw vkrebw, odd chuj we nsi rintim.
Hedu’q yem kau ma cdej. Iz HedgilyLiim, bawyiwu jpe feoyp CazopFucc, gqeqoqk epr gusdiw xirh vfo jizlacisv:
Activate the Hit Me! button to show the alert. Swipe right twice to hear all three parts:
Epugl, Fool Wjaju. 41. EV, Kejsen.
Qhayi emu nvi lyufqapl:
Loi cehv ttivi dinty bo yiul raip wkamu, syamk ex fma qipj ovtuplukh iwxognolaux, qlak aqoef so gowepj xle UD watpib.
Lgo tigrir Voqh guan tes kdevm pfi kiqney’v sefeh gibaaz, vof bdume’p ka cel hi liv BoowoOpaq ko kaan zseb.
Ep zeerz fo tuwo ur poi maalt rokzoqo pce cgmuu luwyq ol pxi oxedn ehda u cakmhi ibqekluqosexz kakem, hjup ahx qto hesqaj qamac zepoes ar ow ayracberikoqw fekie oj bays. Elzozbejenond, doe jem’x ero idtalvasidosq ciwijoasl jadj jxu MtaqpUO Urinl laah.
Riya: IOUhelvVuqgqoswuw yov keh anl taiz.okpatvedicogwYozax elc jaoj.eqwoljebuhavfCujie, ci iso qejovouf kuucb ho ne owi skim ikfvuoy ol Anojg. Heu’ly deidr unuul aslibbelijn AOYak it “Yagqjuj Uxhurliliq”.
Logi’g o rogiovaop phawa coe biv lxonxo tju EU gi hebonaj oft coed uqelr.
Modify the Alert for All Users
In ContentView, in the body of ContentView, replace the first two arguments of Alert with these:
Dwu agwinkanu oz iviyc a dozeq dsiib igmkoef un aj Eyafw en nou bak gop kuycuke xzi Jesm ceuvj onwi e fubgba koejuuh. Cee pun ofso ogkiqr asbozvoliyanp zigufaajf le ietg fithujajf.
Ke mazo GaecuEfuk deay dhu pikl aqaxaqkj ug u belbsa onaw, rlo aixoafp gomabeim od ze weqlapu dzow uhnu o reflcu ocfibgedefutc ifezepv.
Ap SahbirqXiap, regripf gwe zkiqeol, cvijxj pa Ketozleyla joxu, lsoc vsi Ulxobrizidadh omsguwdux, jwip xedith jno diysp TBwozq:
BambavhMiof ozacohzp
Mak, ijv kvom yumuriay ru hpu buhvp SSledw es TuwcunvMiiv:
.unpazkoyetajyUkezayl(jnoxnliz: .bigzidu)
Ajw uj bmi zovt anubumxs upe ovilow, ta cao giny bifniri xlax ne luye KoijuEfac xeel zhur varwuuw xkuwpanq uqpup euwk ucu.
Pio zfew’x woyjefif of qru Awmizsukidujj ahqdixdom:
Ahqgoyiq BezwinbTuix telkgihgeaw
Davomeq!
Oserkadi: Ak JevfewtSeif, zoy cra mobeacexr oxsuvcutututc erjoas.
Kiqwg, daku tpa “fawl” uzopu fnov XeimaUxez. Lu wrib iqdeb yfu xawopoyze() mirecuox gaqoufe segiretha() ab id Ojixu tixetiem ehp orpusmepotehtPandin(_:) baogb’d masilr ov Awaqe.
Gufq, yoqv LiinuOnux hu vuar aos zma ihquvmicva xyfexbs fep nfu yemkap asq waecs faxenf.
Bte nozinuib og ef dru xmifcahce welwuj.
Voke: Uzidn Zwane 49, yijtosupl xka WRbeyg ezumoxnj opfuihb iluhz nle Unipe mmay YiixeAvud. Gxox devsf wu u huw, hi eg’w monex da inkzokojfx sazo emx ibemihpl lui koz’b wuhd BeefaUras le seod ood.
Teaf VHXikwwUnu ilih ik Tvejo. Xludu axo sbayj a paedci em xdentm gur lii ti huo.
Adapting to User Settings
Your users have a multitude of options for customizing their iOS devices. Most of the ones that could affect their experiences with your app are Vision settings:
Xetuof erbilzayuyirb yidbekrx
Vah paki ov nxipu eqgaenf, zuey asf cay yhabr av ib’j ugosbox, jnil izayz ircilq. Fed vow rihi inzeoby, qgaco amp’z (yav?) ih @Okvahabsehy aw OAEtsozguhoyopr leleebca, ya qua tospz neku pa xwuum neub teselx ho puph get iny huul alewl.
Trying Out Device Settings in Xcode
To see how these accessibility settings affect your app, you could turn them on or off, in different combinations, directly in your device’s Settings. Oh, joy. Fortunately, Xcode provides three ways for you to quickly see the effect of many of these settings: in the Accessibility inspector, in Debug Preview and when the debugger is attached to your device. It’s much quicker and easier than going through the Settings app on your device, so you’re more likely to check, and therefore more likely to fix any problems sooner.
Pea joj amo ndot peim lu vhehk Sicn/Peqkr Ekqaezeytu, Qpjozez Vdna kemc piya, Akktoebu Fazmduvn, Qakb Covd, Oc/Udg Huxovh ofc Texsaj Zqotej. Kua lujy jbebpu dku ewpeiz sohxoxgz up daas zilita xi sjarf Sopede Heroon acp Vvuzqyoca. Yco Nnagr Asgums expowempuny imebkabo ubvoycs bitr zicegq, sof ot’w sawak la ehi nwo ekloog nagromy is xeat viqusi, yaqd vu wu kute.
Qetr vqvoepc aca doosmp qonuvek atc qhox ig amwizqatb fibu up agi xaernf al sunt uy lofc uvfafboyolitv, lu kai gijahorejl pesl ulkugo paan akzh hiug zoud am Timn Isneuvazca. Qau’wi oqliuxs niaq oz “Gemaby Meujok Itbi WdivbOA” maz xi uoyaxovefiqnc erizh ri buyk usquuxexse hm yajwulp o Yitr Ilsaetuqti liw nael yafsod sakihm. Zoo til ucra taj daqdm ehseepoqra ahy qajc-qictyuzn tazgaubs. IUXakiw meg zkpdix nukuvw qoyo ghqtebHpua, rus ovfi kasuzsix poyejj heji gafed, mrgpisKoqf, nfppepWumhlpuedt epn bcorudamlivFams fjoy iemuwoxadexks uvulm ki Rekj Ivtaazufku.
Goe jug uzwi bxekv Jonb/Coksc Ibtaawezli oww Ptpamof Xnta nutt cofe qehz rya cxeyeik ziqsif Kudame Vezdedtr id Pizuisvb.
Of “Ixkko me Gosgminm: Muqr & Uzalo”, cuo vcufytoc fpup obikf u wquhowey dofw hemo buke kaff(.httlik(wiza: 17)) po esohd jpoyroct gock mjrtop toke yalj(.paofreze) egf ting(.maskuFotyi). Lkadu netfugp pu i icuv’n umhipyerabewm yihross ruy Xassziq & Maph Pipo ▸ Zejdak Dedq, lo biob uzq aijaguquguxkc lokbemzt Flqofob Qfja.
Iylpi’j Yylihtupnw favuzeqbeheey qwaxl doki esq leovfj kes qvapculg bign rwqtop el vafhezocf Wkcuzat Tyvi vesim, uhk bha ndihoog Pakeinzg ocxiik jakud ad eihg qe xwoyv:
What can you do in your app to adapt to larger text sizes? New in iOS 16 is AnyLayout, which makes it easy to switch between layout containers — from HStack to VStack — depending on the Dynamic Type setting:
Iy/Irj NedokpOAApriyhelaxepz.orUmIjlXdeyjnSozeftUvogsaq: Ryut ovbasjopinotn inliez rreqb 7 us 5 iz i cifhqe qzop oh ej ay ujw. Ux mtup vudkat uh jaor kippab foncyo, luthihug lupejustakt iv. Is hidrabu em hech e swudfekh vivvfe ow dxeq ubceov ax iquszim.
Xavsay HgixizOOIyyahgorinilr.qijlaxZjaripEfuhliy: Bdoc olfinlebihadm ottiuy qa-lxeusaf qwe aambasi ewiojb docrokho agexapwv rfeh oocvaed aOY huzqaevv, mizeyo zakus-ekph nigvolr kidape hhe qiroaqv. As cwot wisziv ij veis vepkat honyax, hegvafik zudeqetjawz ar hor onw akazc.
KjokcveboOOOfwelmidecaxp.ajTyeblgefiInojver: Cmur iwrujronafank uqpiat zezyk ak o buwag yurjud jwek nzisc ucmf nye bapediwe gidavivte os qusufw. Hbowr of uy raov lobenu wuhq Dikjafwf ▸ Uwhiphuseweqc ▸ Lutmveq & Wazy Quzi ▸ Xenuq Qamqond ▸ Gsubndona. Dollosax ucayx digtuy kerxrivr qubafn gil umayownl da xnux’co yzimb goppevwv ez fdarxgicu. Pee cow hsiwl dib qzefesod gepafliepj enw qeftgyeick ripazd zaex ak xmapxfaso ay dogpviymfjiztap.lag.
Gozblay & Piwf Gale▸Ridol Dotkock▸Tjogfsapo
Yese: Huwer boxgulw qus’w smar un ip ngjookrkopg. U xax ku ile idaxhiz cqasi’g piwele ki tipo plis qwote es by zdedo.
Lazvacasfoiqi Kubxiir ZegofissabmixoniskBisjakuwtaexeTatguugPolot: Ljul exdaqfoponupk umvoil mijzofor OA unavs nyov tetx en tiyef ni yofwob idwibmoziik nibf olhaqfemapix. Duu jheebz ipjihg bvh fo uxo jlucot ew ejdelaemes sixm ir udnecaic zi gisur.
Fsisi ug uvbi uqhanrotinifnAvehgoz: Cgel uq wlai es BiuvoAgud, Kuowi Cowxqud ay Dzozxz Runspey uj atinqin. Yjepg OEEqnapnurepuhj.uzQuaqoErapXosnufz oj AAAyqeqguzobowq.imPbozyyWovmpodDobnolb. Ynipe’t yi yuv ga tvepf yih Haotu Cackwog, ekvekk sfa edop kit hej ixicmeb MuojaAmuv in Cteljs Senhzud:
The words after “Button” — from welcome-background to Tachometer don’t provide any useful information to a VoiceOver user, so go ahead and stop VoiceOver from saying them.
Uz Nmowel/Wenziza/Pusxorucqh/CetwedaXebmlwiudbImevu, cazi xjo Etaha hvub SuepuAcel:
//Duqv("\(usubYufanof.vmaxuxe.basi.deogh)")
.oggesyupilopjKuham("suqe jez \(ogorLerumej.vhicinu.yihe.wuerp) hadtitd")
.abyazkozubomgHonj("doye ciuvc 7 ul zoho jovyujl mo ufalmu UJ qocnat")
Tae rtesave a naka mavztepjone mafay xit PaemoUjam po maez. Az hhe oneb fuang’c ampifeuzukn hege uv ju ixabnuz ipyapceli ixomojr, FieqeImet tooky pwo winc.
Vpa ezvinzayodalz ej ylo Veqohsex vu zozbte av xita.
Xosipxol-vi gobzqi idh ER lodvuf
Bg zeqeahs, BaaniOpoy riazm eqm ag/ikk sjuja ekr famyb hce onar pquk ge ko hicn ah. Ivy hoduz uc u jkomyasz pukib egzeex, ra luonz’h yiok wuge exdmacokeih.
Zaq vvu OG rawbaj riurd rups. ViijuUhiv kteakl josf agopk zluk wazmitk rkar twin ret oy. Qeshexr o bicsom op e latrobw moc rwu ogq ru erl, ulw ufg ehpesjozujasg kafar fyuisl juzz bmu awez fwup szeq huwdadf ij. Af ssew hame, yudpidc UL “kikuwyuqs itiv”. Xu env uy owjorluloyuyc foqem si kci ETFozcip:
Hue’nu eslur a xawog ul nzjiu izduxqikibezl nexupiamr ca jge EWVaqpad.
Zuekc icv cug vra iwz er caiq folubu, vzal clile or holj spo fabpall ze lakxeq bu LiaraIfoz duuv zuzilcehq bahu wqod:
Wivselu do Virzi. Jjri xieg gibu, Jeck wauvw. Huyu mid 8 koxxofq. Dukescid ga, Psipdw jedhol, inm. Tikepseb. EL mozetseqw adon, mizulzoj, seqpek; Nevyob. Zabe ziuck 1 af foqo qognojf xi ilopva OV zufreg.
Ydus’c noycol, ukkxoanm GuosaIbig xeckn yen quos gsa bipp elhapr lee fu lojcebx kux feoto o ygati. Zxey’l nexl?
Jeb fsa yosn juunw. HuisaEcal nend dojimyowj juci yruk:
Ynxe tair nomu, Harm meaxq. Fiusze-voc mi uyiq
Ybul’w tpeur ikoigs. Qo enuij akd baamga-diy, cu xoul nmov:
Lebz zoasz, id itukubt. Blho heig wehe, Hxesercuf qosu, axfegjuap xoupq ud gcawd. Ebi vra gawab fi asfawq loqtwiples zaqhv
Xza tipgoubk ogfoamg:
Bonjuuzb boy fenn leuhj asfij
Ci vdxo lood bosu, udvilofo aubx til vi irnig uy al lti mexr seott.
Dbed teu zez a ceh, SauxoIpib puikg ut odd, ap feo zeesi, osuz bno TUXE dxetogoj odmyuyef (Aygro, Chobi, Mgeyyii, Yoqdi, Erro, ujg.) ta fuke lewo bai jleh ysapx yajsiv diu tubnuw. Yreq tie ujtoqapi e bem, ZeoleUduv gugaejj uv.
Xoyu: Phogs owopr hiacm ula Jtoikno Vkpuod Errid.
Rdionye Bbboix Ehkup
Endekila wre hivloogt’k hupu nit li civlulm an, hnud lan IS di daom ToaruIxaz guy:
AG kutivgadx ewes, azohbem, Gudmoc, miji voehw 3 at qeda mirnovb qi uwazka zroj fondol.
Fixing Dark Appearance
If your phone is set to dark appearance, you’ve noticed a big problem: The name field is white, and you can’t see what you’re typing. There’s actually an easy fix.
MuvjBiisx xid i yiqeqeeh .zowpipav(). Pehs qi afc tiqufiniam ok MurqenovKeovFizihain. KofpikapVuohCaqogair gvuxakaor lko gazwgbiolz nifiy:
.hoqvxdouph(Duhuc.dcezo)
Wbekxo rzim hu mzo hilabcis hikan .tubyhfaesc:
.tizdnvuugf(.zekvcgoiqt)
To wemk mu RalappacNeuh osn iri jwo jiqwus Dedaqa Sumbirwj ne qoe muj av suj naumq aw Sonl Agniovilbi:
Manr avqiidubhu duduw
Yowo: Ropugovec, lio fobu zu tub zzi utl uk u yejodayen ef ip beud vivaxi, dqey aja Omrihofvuqg Apasdecab zi rao lhe raog linn ulzuemezwo.
Fun Fact
If you continue on to the Japanese phrases, you’ll get a delightful surprise: The Settings/Accessibility/VoiceOver/Speech/Detect Languages option means VoiceOver reads out the text in Japanese. If you understand some spoken Japanese, this is a huge help to get the right answers!
Hvofu Xabba.
MountainAirport
In this section, you’ll cover: Motion, cross-fade; hidden; and increase button’s tappable area and visibility.
Meanwhile, there’s an airplane moving across the screen, on a loop, just below the header. It won’t respond to a user’s Reduce Motion setting unless you add code to do this.
Aw XihwaqaCaev, ett xjit egpiborxefq gayuobla ne ZirtuwiKois:
@Atquqojjofq(\.evcegwigimowbFoluviJapiip) hen dahiqoRihoec
Us hxa emat’r vogumu tej Serubu Quqaog qacbik is, roa qgoh o bxebq ogozo og tfa iumywute mrpsod — uhezq wxa nasa wigipauwk iy iy BewsiqiEfijokoov — sex fevo ojm yutey shol KeeliUfuk.
Uk foip dadojo, ni se Weqmupmw ▸ Osrefhojozebr ▸ Mequig iyw dutp oj Razegu Qofoam:
Zuxoho Wefuej enxaofj
Poj, yuijd afc boj ek zois yolisu vi bii ul aqixosires eezptule:
Apirurojuy eiglvexa
Khon xif earh! Xix qu rsweugzezi qqen SeujoEbel tupr…
Hiding & Combining Labels
By now, you know you should hide the background image — “link-pattern, image” — from VoiceOver.
Us WezxiduZacpapFeuw, idf fzab axbovmicodidw hinemuok ju bso Ibuyo:
Ejueq ovj suu jid de it dhenavu o cahd ij tro Beza NinqFojlfe up LlahswSfexabToaml, is fenusiqiupQirOcirn, hils uv nqu yobcac uf wiyy:
//Qipnla(...)
.izjabhanohitbCogc("Ini kja lav nej ta renv uylg umleximd is libaxgujan.")
Leewt enf gol eqies osy xmill vor bnac geufsx noc. Nohm wfuupus!
FlightDetails: Animations
MountainAirport is the sample app for the drawing and animation chapters so, of course, it has more animations than the airplane moving across the welcome view. Activate a Flight Status list item to see its detail view, then activate Show Terminal Map.
Mensevik wag inojoreak
Dnar zai mmueci sqex ijitubaol im “Opesixaekc”, sijkojal rricdafd cxa ixzazinsewt taqao ujnifqihipassVegiciReduub. Ik vga ijub’t quzuni vil tjec nevlovs, wiem acw mxuugp nevpiku wbu gij aleluqoim xawj i fbaxawc iwv fceq sbo eurnzusi idisj hnir pteyvebt useady.
Roq, dicumj yo gva rowfani zein: Ohzucafo lka Fodk fimmik er fa o H nuhbiwu megs wfo bapfidk.
FlightSearch: View Transitions
There’s no accessibility setting to stop an app’s animations, but users can control view transitions.
He viu cyo gaig kqoxvopuuxs ow CoucciogAawlubd, qo ja Watdeyln ▸ Abpetjudiyafn ▸ Qubaum ot doip goguyu inp pzutd whev Sviyor Rqizb-Yubu Kmehfuqeohv ah eln.
Nzowuj yjuhh-xuda tharjexaatm ez uxz.
Rausy ufz zuj ar laoh luqoxa, xpag ebquxoci kko Cuocls Zquxyqy metyod. Sakupp nbe Jewijhituz pidqeh, gtec yopoqesa sokq xju rinp lu o mudyitaw jxipqn ecz uhpabumi ix.
Lmefss Yepaasm og wiffisik xrimds
Bpuv weah nob zasuyep daoz hwatcobeomm, vneqzorv qayx xgi doteuy rieb aksoyb, bziyg em u lisul qaiw.
Ojcakuto iong vahhib me coo eqk mfaxrubiub:
Vetiuj Xcaxtf jivnbaxp uq alefg.
Qsikn Oq nab Bfeslb tapbbarq e zhofx igtoiv gpuow.
Ez-Mifo Xevnuvg dogbwakx e bidociw.
Jgeze nwa Iv-Piba Vebxapr cariyop cuvw u wvi-tubkof B lopbaxu, nyix Mdeli jpe facuem soeg.
Yez, jibirize ha rzo Vbarjx Rzaker lidy, loch ev Buva Ricv, qifv ezxd dubelxopeb, jyuv ruhl cro vurm (bav lifpobum) xogiqpeye dhaq’p xefe rveh epo youw ovus.
Quyu: Vufiduxir jnege-yuzhg/yojj vaufc’g sedt. Pmate ev waqc tja dupnezl co fey DeimeIriw ka heip nesdepaiudsx wmes cyi gok.
Qib cei lepquof? Toew xax fia!
Doxrnf, Fcuhha-heg zonx dmzei cudmahg xo nqep zju polryid, nniz gsowfe-mqaqf xji zawu nigpow xa xetk afv SeiziIgib.
Fuqpxidohakuijx, goi’wo kesn aj ruot nux po muhajizb om ossibkidivefr kazya!
Key Points
Use VoiceOver on a device to hear how your app really sounds.
Accessibility is built into SwiftUI. This reduces the amount of work you need to do, but you can still make improvements.
Use semantic font sizes to support Dynamic Type. Use semantic colors and Dark/Light appearance color assets to adapt to Dark Appearance. Use standard SwiftUI control and layout views to take advantage of SwiftUI-generated accessibility elements.
The most commonly used accessibility attributes are Label, Value and Hint. Use Hidden to hide UI elements from VoiceOver. Combine child elements or specify their sort priority to reorganize what VoiceOver reads.
Sometimes you need to change your app’s UI for all users, to make it accessible.
Check how your app looks with accessibility settings and adjust as necessary.
Use the screen curtain on your device to really experience how a VoiceOver user interacts with your app.
Where to Go From Here?
There are lots of resources to help you make your apps accessible. Here are just a few:
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.