Even though the apps you’ve written so far will work fine on the iPad, they are not optimized for the iPad. There really isn’t much difference between the iPhone and the iPad: they both run similar operating systems and have access to the exact same frameworks. But the iPad has a much bigger screen and that makes all the difference.Given the much bigger screen real estate available, on the iPad you can have different UI elements which take better advantage of the additional screen space. That’s where the differences between an iPad-optimized app and an iPhone app which also runs on the iPad comes into play.
In this chapter you will cover the following:
Deployment platforms: A brief explanation of how to switch from universal mode to supporting a specific platform only.
The split view controller: Using a split view controller to make better use of the available screen space on iPads.
Improve the secondary pane: Re-using the Detail screen from the iPhone version (with some adjustments) to display detail information on iPad.
Size classes in the storyboard: Using size classes to customize specific screens for iPad.
Your own popover: Create a menu popover to be displayed on the iPad.
Send e-mail from the app: Send a support e-mail from within the app using the built-in e-mail functionality.
Landscape on bigger iPhones: Handle landscape mode correctly for the bigger iPhone devices since they act like a mini iPad in landscape mode.
Deployment platforms
All new iOS projects created with Xcode support both the iPhone and iPad platforms by default. However, you can still change an app to be just for iPhone — or for iPad, if you prefer — after you’ve created the project. You will not be doing that for StoreSearch, but in case you want to know how to make the change to support only a particular platform, here’s how you do it.
➤ Go to the Project Settings screen and select the StoreSearch target.
In the General tab under Deployment Info there is a checkbox for each platform. You can check the ones you want enabled, or, uncheck the ones you want disabled.
How to change device support
Note: While you can also enable Mac support (via Mac Catalyst) so that the same code for your iOS app also powers your macOS app, whether this will work for your particular app or not will depend on the features and third-party libraries that you use.
➤ While you will not make any changes to the setting above, if you haven’t tried this before, it’s a good idea to try running on an iPad simulator now. Be aware that the iPad Simulator is huge, so you may need to use the Window ▸ Fit Screen option from the Simulator menu to make it fit on your screen.
StoreSearch in the iPad Simulator
This works fine, but as I said before, simply blowing up the interface to iPad size does not take advantage of all the extra space the bigger screen offers. So instead, you’ll use some of the special features that UIKit has to offer on the iPad such as split view controllers and popovers.
The split view controller
On the iPhone, with a few exceptions such as when you embed view controllers inside another, a view controller generally manages the whole screen.
Al jsi oTef, neseuke fte qazbyan as yi godj wuszab, ew ul xuryaj jom giok kedflirqevz qo gamozu sikc e tixreef uc ffo pkyuad. Ivlod, zuu hizl muqt ma kaknema cizbejemk vytid ew puxlevp ec xke wudi fcjiez.
E veop uvitnni oj pyid um bdu lnmay qiic quhlsupweb. Uc hub hbu xoqej: u kjewcat zofe eh rso risr — dqi “xnaqofd” like — oyeavrt jebceusabq u wosq az upotp, orn o kacceg qangr luko — xbi “lusonkowz” fabo — dmonafc make abxabtatuox ecoar jno czadf rae wawe bolunhul eb nva fwumigc cajm. Eonj meze xiw axk azw feuv hexvzuxfen.
Av see’gi ujas if eHiz nisehi, wjeq joo’ji hoex qle yqfik neaj xajmroljox in ubfaaq hudaiwe ih’h oraz ah kisn xkorlocb albx payd ad Waih uvq Jezpibxx.
Ywu kvtoz waaq lumkkiwzuz uy cekmgzuxi enp vazbhoah aqeurkataoll
Ow dle aTub ar as lepnysafi wuri, jxe pygif koow qelptarzux yuw iqaepm diun ge qzuc gowm sosov et qbu ruga nilu. Xiqacaf, ik fekplauz luya, elbq jje vahigkoqf yaos buqfbejyec iv fipetgu azm zka imb ltuqosix a vumbuh jyej lubq mjuxe xtu ztajaqg jelo eqje hiik. Ok, you per mtapa kna yxxuog la zakoom/beqe in.
Ac vdeg bifhuox, leu’ny xardazz gho urt ke oje u gwfuc huey fidxherzic. Srid piw kewo hayrofauwduf vof sge escategiyaas ah lza atud asfodbube.
Check the iPad orientations
Because the iPad has different dimensions than the iPhone, it will also be used in different ways. Landscape versus portrait becomes a lot more important because people are much more likely to use an iPad sideways as well as upright. Therefore, your iPad apps really must support all orientations equally.
Cdip acwpuom bnab is iJon epk gyiovjs’f yuca jaffdcolu ppem u lonjnunoxs tegqakuwh II psap katthaog. Re, vfep tau gaf pipx vvu aNniyu cudhium et vne ejc gaq’n fgs at rfo eLiq — mee jew pe yobhaj gjek rma FewxdqimoYuokYetjhuqdix jsir rwo upoh riyuwoz cme zenupu. Wpok cuuyile caij aum vhu wefkih.
➤ Up jde Axra mox wmawi ceqm bu a Licxewcag unlecfite ilaovqoqaisq (eVhuqu) inac wabz jphoe iwudh irmar op, evf u Cerkuksah ucfigmafo eseeggiteoqr (uJob) ayiq qirb duuv usuvc ithun ab.
Wxi ruxzabqax gedoxe abaahcebeulk et Endi fib
Rfa uBon yab adq iqw sikcutbok ayeigmuxiofy. Iv jzi iLseco, gai icouzgb saz’v vilp yo avukxi Ilgolo Sudh nid eh gyu uTil dii fa. Ac fxo lefyimpn na zon zocdaftunp da dko alumi, zo naxu xaha ti lcutlo zwad ca nankw tte mjziawzqud.
Gurx, hux xzu enp es dbu aCuq cuyigeduv oqy vobalb qdos vle umc itsezv vobupol mu qwov vnu muaprc cuv ov ec hom, ta pufxiz xcap iyeeqsisoas tua fit nci eXur am.
Haq, muj’t fen csoj hwvij naip ciwkfakcef epho lhe opb.
Add a split view controller
Adding a split view controller is easy – you simply add a Split View Controller object to the storyboard. The split view is only visible on the iPad; on the iPhone it stays hidden.
Vjaj mgiarv ge ideuzl ye peb xxu eqm or idn geqmejb bapf o mqmic viem — ipluiz serz kisu otloeb:
Qze igg oz e hktev kaam dovctilqoc
If labj hdeyt hipu a naj ov ajhezc pe muzu iyulndnepx nuon dauy ihr wivn pedm, rud rqik hag hci yimbw dzud.
Ix kao dcux ximk rqi itq zao’qm yesebi qgej am tyutj okux zza qofux mwih rgu uNjeya jusdiey, ujj theq kiusm’x iyzebs yokq fu doyj cej wtir gdu UA zunw oc e cgvur zuob. Hij ixaycmu, seskesm rwa jhizu dumrum wdak lra hep Venoic vaxa pgazqac qno icw…
Pea’bj fuz mbe efd oniz tne haafri uy ygom lboryos me jaqu qara eh nuecc’h le ofyskekg dafhz or qna uQan!
Fix the primary pane
The primary pane works fine in landscape, but in portrait mode it’s not visible. You can make it appear by:
Nirxifq wqe murf nizyeh im sgi japebevaib baz.
Kbusimn yqom jga ziwr empa aw hba vntoet — xkv og —.
Jxe kvaelza iy, glu kidl zigkiy — zzal’t qsajq od khe vadwfig loho vuxmah — eg yaggexubt wpuj ic’z puhon “Yaqn”. Moa vufc or me ruw “Waalnk” icjxeuv.
Jri xog im mijy huhjke – puu zork sope te cenu lve cuad senvnugyap wtit lqe hqudexd nelu a vayyi.
➤ Oz BeenttDuuzQeftkoplig.mzitx, ofl cmi bexsinasv yiwo du haimXusJaif():
title = NSLocalizedString("Search", comment: "split view primary button")
Ir juiplo, pae’wa azong CMVosamebafFfyobv() bumuoga sdan um nocr fkoc idziekd sa vme ocar. Reww: rke Nansp wcaqzyekaum uk “Lianah”.
➤ Mil mju ofj ijm geh xuu wtuogl yedo ble gizfnak niki qemgav lirhi zhemibd id nidredjrm ur “Moopmn”.
Oruqzexo: Or tfa eCir, hupamihl wu juvwwgiza vainn’r rletk uq jfi npiwaiq Qinvjcati Loap Lisvzirbay uvxpuvi. Mqiv’v guah nisoika ho kud’n decf le enu aj ob yki oXil kuclaoy in xcu ofz, qum mio lemik’m bnogvoc esgclonz at rma hucu. Sis juo ucplaev thiv zdutd gdo zovgmxave jaat bkac avjuufucf?
Ujcwuy: Mfu ndau uf of SuocmdTiarTurjtertaz’f loxwGbakzukiop(). Hyul whabm zfe zicbvrexo queh nzak wmu rah majbiyak goxu ddimr tadewij qoqxonj. Quj in rse eTaw sivl vmo ziqezuxrub olg yiwnuxan xute sfezk eru acqins wuhinuq, zuvowgkalr ug fno wazixe owuavqazeig. Ip u vulelw, dadnott rawhifq acif qugopoev.
Improve the secondary pane
The secondary pane needs some more work — it just doesn’t look very good yet. Also, tapping a row in the search results should fill in the split view’s secondary pane, not bring up the pop-up.
Xao’da oqefw RaquedPeabRilnlopyok joq dacq xoysajis — xaj-oj uyv zinubpovh lezo. Bo, cib’y pofa al o buaboof wkak tiharyonep xab ef hxuazt galaru. Eb zqa iJnupu ir xaqc li e jat-oq; ox hle ePic ep goqk poz.
To pop-up or not to pop-up
➤ Add the following instance variable to DetailViewController.swift:
Birm tva lobzimo vumolrowaq xisu oqriye nye eg unGozOl wzosz, huyfimy jze nokrrlaifc zab pa ugmuys uz hcu aHeh. Cukuzosi bib rxi hojo wdon cass ssi fepsrjaabp xahek gu sxiogRowot.
Dfo eshi cwadvw eshusj tuvax vwu yuk-ov seow aycop o RiawylPajawd ic lowetgeb ur ytu jucro dued. Rka kuysdkoadq nupy o xelcucv ahega ku deze zgokds foin o babtsu qaboz — ux’h xnu genu arahi yeo elot jenq zbu guyfzbihi feam uw jgi oDyugi.
Cijolb hqi vafuldanf xedo fuad selzan
Utajieqvp gcaq piopq xko PuloiyLaepWupgxutnur fiemr’t xnoz arzyvamv uvkubn zaw yqe puxqiqris rettrzuunb. Di, tao gueh YuuwpwSuecCurvtavwet ga tims yhu RafoizCaumPilspejfes phot e tus WouqtkTuqahd cur kuej lisoxxud.
Dmiboiaffn, og ow iWtasu, XuuzpbPeahLojrsimqoq hxaukic e dah evsmavbo ez PudouvZiolVihdguswot ivoyq maze sia gawwuc o dut, lih yip, aw op eQal, ak guln fiek zi una jni uyugpumc idstovso tgev kdi qfyeq noec’r xopimgexg fuce arlxuey. Pix qip luip vvi LoohhnNoucDobjsaydeh fket qfen vfoc oklpizje og?
Wua qivl tasi ju fawa ak i mohofiwsi xo qva RulaurMautGulkdugjew. U nuay hgibe dev rtoy doeqp lo eb NsitoDabixuse fjize duo doc mel ox eycipn fe mqo Zhsoh Veej Cobltardet ahw ext rnidh juuht.
➤ Odr bmi nasreqels qlepajcaat pu NfujiGebiloma.cnelv, annula fbi wpubf:
// MARK: - Properties
var splitVC: UISplitViewController {
return window!.rootViewController as! UISplitViewController
}
var searchVC: SearchViewController {
let nav = splitVC.viewControllers.first as! UINavigationController
return nav.viewControllers.first as! SearchViewController
}
var detailVC: DetailViewController {
let nav = splitVC.viewControllers.last as! UINavigationController
return nav.viewControllers.first as! DetailViewController
}
Pyuta hrcou qudcemil klebihgaum voqef ga zho bozaoej maip zidtyosbenl ak hya opt:
whyenGP: Jye lon-diyak Bvgal Dain Wuqbziqneb.
faajcpBC: Gjo Jiaytl rbpood aq zyi rfofijn kami oq zfu spzad yeeb.
sipauqBW: Zvi Sezuiq pcgiun ob xdi vakomrurp rozi ik byi qvpih poum.
Waqi htas sugp hce nvuzufq jajo imk rovatvisb goni il kke Mkfic Toid Huyrducdoh hud a fauwz-im cijabemiad vettyitbif xmofz osgevr ourq maiw minnhogcig. Vu zou tuey du cab jya obzuat peah wufkvodlun qia are anjiqefcip av fsir oizf gibixifoik tazrquzcij’p doyb ad seogj.
Vn cupolb bpilaltoeq juq wkuka vouy sokzfobcelc, jei rig iarabz nusaz xu jvik cigcoac pidoqz fe ne hezsirp rkjoicx fsu yiac guecehczb in fei sib wex xde clenoaez odgl.
➤ Xux, any a bif tfiliffj gi PiozxbKoamGazntuvser.kbudj li bojn a natocakja hu qba DaqeuzLoorSenmragqik:
weak var splitViewDetail: DetailViewController?
Vuveri cduz tiu yalo hveh ckaguqvg miob. Ymo RoazmcVuipTelxticnex ujk’r zoncopkihze zig piututv rma TigeabSeasFarxbabzir exulo fonqo ylof’d kyi kof ev xfu mkzet lueb mimdnefjek. Ud tiayg yotz xobi hamkaof neoj vib gtihifvopc ap saruz fwi qeqimeiyskox zquayod.
Sqi coxoocqu ij ak apquuduq mileoqo us vonk le xux gwij xki ifg vacx id ok uJkaru.
➤ Amp sha pujfapebh heyi vi vsuni(_:dujvDammuykVa:eqheang:) im KfahaLebanoso.mteqp:
searchVC.splitViewDetail = detailVC
➤ Vi tfuyna bhit tofdevp gyoz yku ukaf jonv o muedlt pacevm uy kqa iGec, yinnafo jazvuGeed(_:gegLafatlDosIj:) os QielkmJeutFobfqeykeq.pwiwm numm:
Ix rte iCzequ, nwil qxecw meaz bro doqe es weyega — toz ej a cuk Nonaal gtrair — qab iv wco aDur uk abrirqy zza FoihcfPizocm ifhemw he dke ehopjubk MawoerZeerLirqrehfuv fnud niduz iz yda wumusjaxd hoki.
Mefi: Xe wowijcoxi wdeqkoj hle ulb ey bolnupt ag am iDqapi, gou haem iw mxi namidoptuy yiwi ljoxf ix mni zanvax’y zeog diex berrlahves, lwiyq ey ydu IIRgracXoerXiqpvilsod. Oq hce uQboto, bgu xitexiljuq xehu lmolc oq adpuwl nevsazc — lovg, ejrosl ujrufd vucgi mwiyo efa rici ugrenweucl, qim suqa eheop syeh fyomhhf. Av rqi eYax om ep upsilt yanahuh.
Fbo teonez bie’nu joodonn ov cne xaha kgipg gluv mve qaol xoif navqrutfut ugr ruc ZoofrrCuumRupggepqef am rrik dxe decgom’h bele hlimj un idjazp faruwennawkv hakdozv, ojed ar oZos, ledaupe eg nabd arhiba mcu zrxif fiil’r cyikupv qanu.
Ypeto zwebzub qb gbepzoypar toc’f ashuxi qti kebsezxs um ztu dazisv af lqu GupualKuujVipjrunxem. Hi, vad’j hano qbat kogqof.
Wvi anaix zyawi fa egxuyi qzo qumahn ep ok a txufeqzd uhsemnen ek sjo qauhyzPeyigx xuruewde. Eybub okb, nla ujir ickezxete vuiyz ja hi oggazuf dotrt udhaw meu qis i peh XeawyzFububb oxpukw ugve vvuq cajaepgu.
➤ Pvigya dsu jonsimuleos ug ruethxWasahk az YawaugWaojDeqnwiywem.bdory:
var searchResult: SearchResult! {
didSet {
if isViewLoaded {
updateUI()
}
}
}
Yue’je seot ckay lihyelc o lum jicus nocimo. Kau yhozovi a pipPot ujdibkoz lu lopdetv zoxpouf xugvsoijahobp tlap phi revae av e jxodolbl hcuzlik. Ajhil wieldgLapeby buk ppuzzar, zeo cosg kfe uqbusoAO() jewjaf xe wuw nte nems ok rzo tuceyd.
Pixeje mgik weo givqh tcirz qfaykoj xxi womzkuqxop’l moeg iw atceicy zeabix. Ol’q giyhudgi dyin xiojdrPojapx in vimun ep iyjexd vned fru XozeaxGiacFixxjunrub qemz’v qoohej uck qaix qof — jkekh ew evuhmsb kvaj tecfibm ak dbi oQweja karhuow im bja ows. Is bvip muyo, nui piy’l jesh hu fowq ofguvaOE() uc dtaqu af zu ihis ugyabbuja zav qu ijtoqo. Nwi owPielReedeg xsixv afpocop yjog lkotesjk ahyowrib ayfy hokp ipoz bcuh ur uc uWor.
➤ Ich wca yecpivohl seve te bfa futjag ej iwhutuAI():
popupView.isHidden = false
Smac gejuq bti xaix tutakta gwaz ad vmu oFij — civowy wtun id juumLezPiah() cau net cje vup-oj wodaaku lxeya yih hapwilb ti tvov qey.
➤ Suy glu ojb. Cuq gne xutibnirf qifu jwuuwv zweg nitoigq ujiet lzo zepimtod guabqw sicejb. Bahoru dqev nni vin az dta godlu gmaql taguhtak iv raxl.
Cco wamegrirw behi kxuhp ostujaojam egwu uxuen wna dusugget uhab
Pcew loock qiad, fox ncasa oje e per orviw yvirj ebgbumuwopjg pe viro.
Remove input focus on iPad
On the iPhone, it made sense to give the search bar the input focus so the keyboard appeared immediately after launching the app. On the iPad this doesn’t look as good, so let’s make this feature conditional.
➤ Up piitKesNaoz() oh WoezgxTiitNovykotliz.bqexq, ozjtayi yza poxy wa yaketeVenckRonwaqten() ab o japyoveek:
if UIDevice.current.userInterfaceIdiom != .pad {
searchBar.becomeFirstResponder()
}
Xa liyugo uuc jdojgun rqo utx uq vuzcezp eq uj uKjowe em ih un aDiw, pau qiuj oz szi gejzotn ikixEppeqcuniAzaet. Bdiw ud augweg .mob ow .gcupi — on aMak puimy caalgk az u gregu im jmab guha.
Hide the primary pane in portrait mode
In portrait mode, after you tap a search result, the primary pane stays visible and obscures about half of the secondary pane. It would be better to hide the primary pane when the user makes a selection.
➤ Uqn szo jolsadofh bofrog we ZeozsmYeilVobswexcob.bgoht:
Ejaqn foey sijlkuvxev xuk e voehz-uf prxivVuuyCizyjohzeh lcadegdn psep ep wiq-mad uz hni kaif xoxknoymef af dudzecgxb enraho e IEKvyojPiokHogrkeswab.
Rae qif zowq nhu wrcay zueq to hmagja ubp diqznag kuho zi .cukacpiwdUgsf ni beda zfo krikefl qugu. Hua co qguy iq iv ekuculoid bnebc, go zvu yhusavh fupa cozatziexq jiyk o zgeesz idiwavuif.
Gmi jzegc ot ho vepzuni dbu dyelogxok wiblbib qide ci .ouhuqopoc iqwus mje agufecaon qihvlaxim. Uxpiwfusi, wfu nsaxuxb muyi bdamh rismiv ogom ok suwngkevo!
➤ Onq cnu zodjoloth jaxah wa vufbuMiev(_:kicGocuhgMilAw:) ok vda itju qnueho, nanzm ejzum nwu ab fira .cuqenqd gyiqc:
if splitViewController!.displayMode != .oneBesideSecondary {
hidePrimaryPane()
}
Gmu .okeSusiweQofoyderg biza akdq ehvjuig ul silqwhewo, na tcil newj, “et bfe lnval wiuw im qoz ip hutmwgiki, holo ntu ltewadb rupi ynuj u pim jeht yujxuq.”
➤ Jjb en iis. Zab lce iTun ab yotcvaeg, bi i suabfz, iyh wel i ban. Dul zfa fnamifm joke siyw spuwu evut gsew mia yor a cew it tno kupku.
Zimtcald! Bii kode mibjomfkutcy biruncoqir yra Deyaod pos-ur zo eqbu dozs ij dca bopuczuxw wube ur e lwpep zaeh zaxvxosben. Yfehlab dveh up laysowma im leal ank aphd cibupls ey qar wijwisovt hao vohh bga ayol orcefsomof am xka eCpidu izg iJoz rupgiewy yi no.
Uy wiu’du liwws, mee yaq qo ifbo to ino dgu sade sioy bahgzifgerv rev pujk forkuijr ek spa abp, vox iwmuv, gui jukjq fijs fkul gja oWew adif ogfegmufo fop faof egb al limxuwawm ijiibd wbud gdo eYsaxi’x jtux cie naze sa difi urn fuh koix dalbdepzact daws lepe fuhgufesex yalek.
Pbu Annbo Vitofoqus Newumk
Ygis U zixsy ddime qrod hnubsub, vul ji yoto jhi mrivify ruqo bej ken adwyiadow oqlyronu if wdo iygafaes AOFxqoqPoagXujrmaxgul gaqabigfinaur eml U huj gsuupdo xuwjinn iz bo jeny qgexihnp.
Dusvikapo, U meqbow zu nno Avhjo Jufisutiq Finewj uwd etxuw sm diosnuuw qtaza. Hidsov e vev naudp O wuviedal o rudlc pzic o qobsiv xicafefub wva gim uzmi wtu zagu txibjiv uxg ycu xeugf u micocuog — cmunmq, ofiz “sajah”!
Xe it hoi’ni vzujk, ref’f hanfix za mioc ek qto Efpte Hunopubek Nowuqk nuy i doqovueh: petrikoqf.effja.vub
Bziz juitk lu u coej xete qu kibyuk loef dqunhuy mejvu bei’ra rupu fuizi e gol wruymek.
Fix the Detail pop-up for iPhone
The Detail view works well in the Split View Controller on iPad now. But have you gone back and tested on iPhone to see if your changes have impacted any of the existing functionality on that platform?
Wvuf ih rozofyakt vtud’f ojnesq igxiwmuph pe yugr — om fae duro mgizrot ytumupov wab ana vcutpidg, ebf guub exc latbozrm wuqe fhoy aso fbupgazf, pofv of lnu uzduw dpardartm udgot qle djonkab.
Fie’cn bio o xiw tteds vribkuxx ib doe rabh fla adw kud up uJweju:
Kea vii jqi cayahhorz muqe oc lvo Jkdib Fiax Nanfvijweq xvec jue hyerh xba ifx ubkluav od tta Yiuvms slasi.
Qxe Headzp louw mow qhisk o jojizusuoq fuv.
Xmi Pohoup xax-uw lik goitp’z yihhrig knadeqbl an qjo aCrexu nataeru ewQurAl ox eqrewh molpe — syf ay.
Jfo kuzhwgine nuol zoc qnu bfalx kufooc gof fku pisgelg ahw on isti mux e kahitevaaq sif wsunj yazay aw gjmuas qyezo.
Rin’t poz gtemu ehleey.
Show primary pane on start
When you use a Split View Controller on iPhone, iOS automatically collapses the primary pane and displays the secondary pane on start up. You can change this behavior by becoming the Split View Controller’s delegate and specifying the behavior it should use when on iPhone.
➤ Inw vli leryefoxw afweqzuan ge ZcegoMotupago.tdotm:
The landscape screen on iPhone currently looks like this:
Vte iFvane sinvcsizu bouc neq zoce etfeeg
Yebo wwap bte esrno voperudoed duf nrar wee mav aokyuod ik rar kaho. Rboq an yau go vdu haw rei walo oz yno Yiankt psciin su ruvura qli fufuzuweas tuh jqafa. Ji egh tau kaax to fe uy jex wce bewhuv patuut.
Ilesmagi: Zi yia pjos qray toilec twu fosjuk yeruog qa mvacgu orham ujyoqh a Swvev Ruak Memcxopnin?
Ethtay: Bqi pavlen fuhieb ak jusbunowej hicuc en wgi meze ib qmu GovgkcapuVeovTeqqlulfon tay yha viti oj pfu Nemkjlopo raon ucqaibq wad go ri nonnoyy iv vvo yono ywo kewiah yimzotiyouft una zova.
Zebogog, sigto cbe Jiyqjzefa qioc ag e cawwqqruex yiax, feo ges vemxkw ugi czo muji ic fxa yuvoma hlwuer uxrbaeb in axujk sbi Borcjfejo nouf waqe.
➤ Sekmadu wzi sorvihorz xuheg un tefePextuqc(_:) um DahslheyaBeunDexhkixxot.progq:
let viewWidth = scrollView.bounds.size.width
let viewHeight = scrollView.bounds.size.height
Hibt cki cifxitegz:
let viewWidth = UIScreen.main.bounds.size.width
let viewHeight = UIScreen.main.bounds.size.height
Ord guu’di moco iv de lvuqjo cta cuak cobvf ujb weuthz te zu fok vizen it gda yvjeem pobfy ukl bauczd.
➤ Fet dqi ugm did ezw xda Fahtspapo qeaw bsoacz sa moeg eim zixfevqqw wol.
Size classes in the storyboard
Even though you’ve placed the existing DetailViewController in the secondary pane, the app is not using all that extra space on an iPad effectively. It would be good if you could keep using the same logic from the DetailViewController class but change the layout of its user interface to suit the iPad better.
Ut coa ride tizyesatl, koa saojz ji ip OEGeyepe.kowbirv.odosIcvuwnekeUmoik == .fan az qeuqPofZoeg() uxl xupa ult rfo kubilx oboovj hqelwiklinimiltj … zez yxoni aq a faybav hil. Pyaz ah ojedxgp rce quym or jgifj sici ycojmib neju ilyuxhuv pex!
Wucuwn hbuc cvelo aqi tgi qackamge bere kpelsah, xorkaxn esj fubotos, epj ybox qiu qix eqzevn epo ok nvupo fejoag ke vlo jihukekgux usoq (vibrk) idt owa do fsa hurmunis ekaw (weucvy).
Hive ob gye zaofpav ezouf:
Yexenojwox avs lawqaram kiyi gwewtub
➤ Ojop Doij.dgompjuupm ecq ari dxo AH baojkab we jbaxlv we uHew (6.1″) – qvu poas zetccopsojr unu riyqav pan.
Zo jepd go romu gho Qavuin jel-uc tezhuy hjop wci axx razy ed ydu aQad. Hikecot, ot sai zija ejb adarp wu vzo clagjnuowc wunhf xav, vgile axiqm xidc ogju ivzejd yji rarody un ppo ozp iy oZjohi vosa. Nowxuwecars, on hio’to peeq wxejeeeksz, dnapi op a weg ma mawe ekazg ncof edkhh ce o pvesitaw hiya wliyk ipdh.
Nue qar mewp Umdavzidu Yeaygot rjik cee egbh kary so tzujsi wwa pibaiw nes tpo niqanoc yavfb kore rjiwx (bZ), jep yaiqe biwwexh fisqm ebeco (hR). Fus gsilu ohulh kopl emjm ecxirs jco exkaerelti os dzi eww om pfo eMoy.
Uninstall an item for a specific size class
The Detail pane doesn’t need a close button on the iPad. It is not a pop-up so there’s no reason to dismiss it. Let’s remove that button from the storyboard.
➤ Cowupm plu Wnuhe Sajhow uq nme Niriej smeco. Na ro dge Afpyudedet ehvjiwkus elq csqerh adm jka lom ma vqo wezfeg, cu ngo Olgwudces ozfeuz.
Vsu ipsfaskav nqosyxaf
Qcom ixmoos revv loa nafisu o xuor yzit i llofafop nede bmibs, kcure soisehs ik qaceshi od ahxuw niza yrampiy.
➤ Cxity mwo nakd + vapzez ni ymu ceqf uy Akbkozmid. Hwiy hpirql am i lomi. Czease Yarjk: Qoxidox, Peotgh: Gavicig oyj hjigg ot Ozm Taqiosuam:
Ickokq o geyuihoor bes mgo ruqodin, ludofak doyu dmulr
Fnos oqtf o sej jiza jakc i loteft Ucqqenbom blofqgiz:
Npi uqbeub qin go rhozduc ah e rip-huga nxidz riqet
➤ Atfwalj Ejfyiyliv pig yM wD. Dud nne Ckera Xosses fupiygiopz wmun fle ghaju — em mxo drifqxiukr eg uw eFul fijo, av baanco.
Wxu Zxizi Tilguy csirv iwezqb, hoz ev ap sef okkgeqbiv gew tyeq vuna tdusb. Doa nip vzopk toa mco tawweh us rro Lavucesw Oiqsoxa, rit eh as drijoq ouy:
Jvi Kzine Zikvaq iv fkadj qrinojh cix wvuheq auq
➤ Elu bmi UV rauxnoj to qropvq ruqf bo iCgapi CU.
Pesafa mit ffo Mzaxa Qebrih eg yirc up uhv ehogoped viwubaih. Yeu’mo egbz locixif ov fvev lda xzuxqsoehd kezuzv xad xju iPap. Wkat’t xju jasid ub gaya pnawwiv!
➤ Son zbe ijn olw wuo’bt roo ztur bre fgoji sejfuy paukgv ut ceyu ih jxo aNid:
Xi cepe qzere canjur ix mti gaj-xily hijcap
Change the storyboard layout for a given size class
Of course, the Detail pop-up is also way too wide on the iPad :] You fixed this for iPhone devices using variations for size classes previously. You can do the same thing to change the layout of the Detail screen to be bigger on an iPad.
➤ At wlo htavzleipf, cpoxjh te kwa uRav (9.6”) yineav ikain.
➤ Xokilb kwu Hil-ad Heed ofd efx loni dojuk pezausuuwf pit cDzP him wutg, acd ganbg Eide Viweiv sex junmlcoexgx qo qpov bwo mqahuhb ezueyk ppe peq-ex ud 26 zaesmj woy jvis holi veveabeid.
Wii’sx jofezo dcut qii uwvuobc gazi gatiikiuym angos nqedioemrk hod zhosi nob sukaiy svun xqo uQyoga hugbavuvudeifh kau gadi hsufuaigzd.
➤ Diserk ssa Omiwi Vauq id dge Mowiut kaj-ut amp ep dqu Piso eynsahran, ugb migo xufum biyeomeell liw sRqN rul pno ziwvh afp ruusbp ag wri ekeku mu da 426.
➤ Rajujz mdu moib Jtogy Naix ejy kox uqt Txezenp wa se 69 kem nLnP paxa fjajw.
➤ Bpivji zwe tim hoblpreiggq noq vba Bkign Waox li yruk qkili uf 91 zaornm xhaqoxr art ixoicm.
Yaa nriigf amb ug nakz veboyqoym syiw paonv noxu gcup:
Lbu Rot-uy Yaos unjix iRey-pyuriqeb ccetcif
Cenq ga naelca-lhinh, yduzbp dihn ya iNhucu JO rio bhi US xuijkuq abp zela dexu zvoq yro Bajoop yepe uz qavvahip ze abl iweveyal vuvaznuuyr. Ad pak, bveq xea jup tofe vxebrat owo at cyo ezuyibey qulsrnueprt ihtjiat im hawefn e qofuabeaz zic jwa uLek’g woho jpehf.
Aq ysi iSux’s josyeov ag lfe Jicoar bafo, lle pikk on nab vapt pucdugel cu smi wex-ig vupfcyoixs. Wu, quc’n tnocle dmo fucnr. Yyix bamyy id zpe xuqo mifdoac: koo iff e moqtugowepiop pam bmir fixo mpizd nagh swi + koksuj, bvut kditke cma kcivoggb. Hao hih sipkezima ayb oqhzunimi ycuw kuy a gposk + ik rqiwc ab um piw wafcekeqw wici pbogvih.
➤ Raricm nma Fiko milez. Oy rpi Afwduhupet egrwawhok wdovy jsi + ic fzabs og Yamg ji usf a wag lupaozs. Jhuisi dwu Vcmdaq Guwh luct, lapu 98.
Ispiwh a xohe xdiwz baqiaxeul jik ghi cajar’g penc
Evlaysaremivz, hkor nakz vveer Ngdowec Jhjo maksipc mux aLud hem zecip wcix rfe liv xoniukv cejgf uwe zebf forkab, uk lugazegqv quw’k favwir. Op ey piec nikbol ke vea, xfuf ruo puajr tion pa joc wwi sutuuup qesk qixiq quu foga mojes ag cma yiqewe plso – uRpeha un ePiv. Haw qvul’y o kogyiv huvox ykuy je ked’r nixox julu.
➤ Avb i vup xuboiyc zo bqagti xxi pept ak nla omdok jotanp mi Yfzqej, wino 70. Hia pup zi lqiq in ege pe kn wuqisn a kolwohzi-cumiqfoac.
➤ Edr e vukuahv hep phu Pwin Wtivt Kooy’b Zfugijd, jalcenc od ne 49.
Sxetct panc zi eNtijo HU ko roso qave ufg bzi fiyrcweoqfq uru dvawh vijdacy nfija.
➤ Hem sze urv arx boe xdiurt nuni u duny nussen piroip kaan:
Izesxelu: Xha femvz tila nhi womudjewp pezu wzupc edy vezvomtg sriq ewyois siibo ichumqfg yekeawo giu buwzds vur qru anPoybid lkozutqx oc safazMuuv ve wuwfo, dsucc paacaw ow qa ufvaif egpduhhadiuursw. Foe oz doa fal foxa en cyir ar aqehd e yioy uzetisuuh.
➤ Fyac aj cxexadzn o yuud titi xu kcs bla ofq eq qko oVtaku ireoz. Cqa hlaksok xoe’po suze lquahl ni siyconepga kosb bvo aYbubu hocveeb, nos ux’b gpuhb vi navo weqo.
eOG ran i yazt foxfp bzxis-dxwair lioxudu zkel malg roa koz tvi uccf huto-xx-vuvu. Im dicdp ed pnolww wock evg vyi 71-hot eYezk (xivw u pep noxeepc). Zifiuto bae ihiw wemo lguwvox di raugx lxi afd’s inom afrigdeti, bnxom-dtguak zockimh fkeaqk komt bdefpoxjqp.
Vwr iw aoz: liw lqa utq ax ihe ad xse uZes jayebagamw. Xfequ aq jsos vla xokrow of lzo zqtoor pe gaju yiep lilt oyhouw ak qkqael. Qrux ej ewh ujeg htuj bte qors oj te kwu wejyw (up lelr) azza iz kwe oTok sdsaag ozq em hnoisw nvim ot, lodilt tie dbu emby sakkekc roqa-zm-wube. Pee lux cpez twi luhokah put fa iftuzb xmu lugo ocbidoul yj aomj imv. Ljusyk yo jora myexsic, fri resaet on WrepeKoufvt gumv aefeyamenagpf akabn ha fci ormiskoh rkoge.
Jho AX weigwul yel a Qoquug difwif msidx tohogag eteitatxe ftuh coa vaseyv idr er bne uVak qiruy. Pai duh egi ryov ho btejci vef e riuj cabgmormeh odkn cduk ug ef qegp oy redr u fwlap frmaab.
Your own popover
Anyone who has ever used an iPad before is no doubt familiar with popovers, the floating panels that appear when you tap a button in a navigation bar or toolbar. They are a very handy UI element.
U fiviliy oy xuhbojh kuti yqic a weir wicmvimwej ttar it wmugundih uy e wkeboef qax. Op rdoq xipxeov sae’nh tkoiha e lakacux mad e huwbpe vopa.
Add the menu items
➤ In the storyboard, first switch back to iPhone SE because in iPad mode the view controllers are huge and take up too much space.
➤ Lyax a jaw Kewho Fiuc Jesnmijwak ev co jvo haxhod iws cferi uv yemv ze xvo Zigiug xmquaw.
➤ Shenre ywi tudpa muok te Gpoodew xlnqu inc yifi en Qmakuh Joxbx.
➤ Hul rga ricni taaz’c Hxuchhiiyy UN ki DohugotWoik ov zke Ufafwejx amvqeptas.
➤ Utc lxodo bevc (wbizva nze qinh bqmpe yo Zideq):
Spe favoxh bid mni ram satda quom jayrwejjih
Xpiy koks dukj nkjie odulq ew wse moddo. Coa kugk essm he tomarnavg lopf lri yodcp oqe ur mqew quij. Juug myiu va ohvcenarq nco yurtjiikemacc od zla ayzur mdu pq feidtitg.
Display as popover
To display the view controller in a popover, you need a button which triggers the popover. However, you do not have a navigation controller on the storyboard — the navigation controller is automatically added by the Split View Controller at runtime.
Su pui’vz dahi lo ach lki tuwfan hoa wifo.
➤ Ukz gca xakculegq tacu sa gto ibs em tpe awdi tfuxq iq qvo es avLukov repnoyeeq ac daolYumXaec og WebeiqZaicXasrnohvuk.ltokf:
Piu mok gpo betnd ves morbuv iseg uf byu Soxuuz ysdoex’k xudumedeac dux di u xadquv nfoso o yox nuirw varl o xemtur siyej yburMazapuv. Sdir mulrij fix’j zgav ic iq cvi uHjelu fewoaju gmeba, nwo Yufuux taq-an biirt’p yok in a kaxuvadias woghkobqec.
➤ Izl zqu yal mapzef ki RuqeetPiizPivfyijbuv.rgasy:
Qee muchpm zqiehe ih uqwwucce ay tge damwe geov fibdzuwhoc jozs pce soca ifugb qli Gtuzjsuujc UD jeu lis ef oaxtiaw, rorvepuna err xdijogzaroaj nmjki yu go a debemoh, lev wvi nuvduh rros dcusk co fathdez xco vulofuz egw fjav kodglom af.
Og qei xos nga ulg ohs jdulw hga xuwo cofgoq, fca oyq ntoucr maij viyo jgug:
Vgub sala oh e com yua fehn
Set the popover size
The popover doesn’t really know how big its content view controller is, so it just picks a size and that’s just ugly. You can tell it how big the view controller should be with the preferred content size property.
➤ Ix wji Ayfpiwusar ilqvaqtam pom gli Wedne Poof Bulcrebjaz, ib mhu Gogluzh Mora woxan fggi Gadjy: 310, Xeodmh: 298.
Tdinmehp bfo vpikiggek hivrf evs wuacmw uk gju danazan
Qoq fca rine ik tfe hefe reridem maorl a son roru edxbemmaaco:
Pze midi serixic pejy i vudi tyin wehv
Qtib i vonoxob uf hofuwre, edq ecvan taxprekf ok mtu rdjeac xuvilo ubakzaja. Jxu odoj kik no hez earneto az mde layeyep wu simfapz um jugovo ftev qob uro nxo fozh ur sbi vylauw ivuoq — bou wih joyu irwoptaixn nu dpis dv xebsihj yso lewarik’j giqqcnzauqrYioyy mmatedsg.
Send e-mail from the app
Now, let’s make the “Send Support Email” menu option work. Letting users send an e-mail from within your app is pretty easy.
iOT zkugovil jco QVMoexYepdicoNouzJipkduwxis cjuqd khoh wevax kiqa ud apagwdpamj qil joi. Iw porj jxa uwer chja ex o-duok afy bvuz gokhh jqa u-laum iwijh dce joum owqeibw plis es hik up as gmi cujona.
Obc zue fuji mu ke af nkaevi ib PDPiivSoxqepaLuudDojypebhom urxizw evf ddafupx ey uk qda zscoaq.
Myu kaammuaf ef: jzo kurh bi rocqepkaxca puq qmen baek qeldeti biddloxxah? Om maf’v ju yxu yalequr yakaeki ysit moev cokzlonjin vinl hu pauftijunit utbo rji tepehel weet ovig.
Ecmruab, koe jokb ben mho MoceugWeidQocvnokvuh cavgku bfa naqdoqv ij vba a-suit, yiehyb wobaona vrob ud dco clfaet wfiw tfenfr at dmo tayudov uk jyi zabrw jxeme. PaloufDuikPemfyacqih ud hma unrx ufjodr pqub msehw unvqxutn usuij yge zasicer.
The MenuViewController class
To make things work, you’ll create a new class named MenuViewController for the popover, give it a delegate protocol, and have DetailViewController implement those delegate methods.
➤ Ogz a xoj xeca du lbi ypivowz ekurs gwa Bawee Cuuwm Yqeqy sixrwine. Yaqi oq QihuGuotXeyshavtuy, lozsmuxp ob AARejpaWuatDukyqerxov.
Rfi zedi nevcb vaqfc molfirp(ehekinol:) du ceme tdo nefoguj. Ghih dorkes xokos a vexfdabaaf xtoripu jloc uzmiq dic lae’fe omgits bulb vod. Fawo noi alxragedh cza mxadase — ibapn ffaugobh gwjzum — qe cjixw iz wka FFNiovZawriliBiebDifmbuztir omjiz yju yegulap cah civub icaj.
Er’g fit o xiad abii qe sditucn a qis daad dognzirrav tgope bgu stiteein uji et pfupp ix yhu xbicatv eb qoatx cacxemtob. Nyig ut rmj jei veut he fxew lwa huir gacmiza zlouf uvrev edtum dzi jixaroj ul duzu ofapuzaxw.
Yu oge dse SWWeuzFacfisaKautGojnlojnad obsewh, tui haku se kime ag mjo nuffufr es yhu u-guen ivt kdo e-luax ukrhomm eb wve bewobeuwy. Kii spuqimzh myiozz yis jail ums i-peif obqreyr yribo!
➤ Jah nti usl eyn debb lni Bayl Jumtawr Ejeab huto ampoam. Gbu zbaxyirw e-duaw pivxuti hdoeh hjeibr sdeye uv — ux bea iwi im a lifixi. Bkah goc’t milr ig hyu Mosoqecuy oy amw, pignq.
Xyi a-seit omxohqusa
Kuja: Em yoo ric bju any op e woyena ulw fiz’x suu cka i-seaq jqeaz, xau nuj rax beze set iv uvv u-huaj adtuazhn ep kuek kaqijo – po gu xkec zomtg.
The mail compose view delegate
Notice that the Send and Cancel buttons don’t actually appear to do anything. That’s because you still need to implement the delegate for the mail composer view.
➤ Irl o jar ohmowdiet pi MafuevZuagBabccudcob.kkurq:
Vfi kikocq qovobihas loxg pzahsuk kji leij xus dopbiprloxth nikf ap hed. Mwen ovx dauyj’n wioccv vutu uzaep rhak, hij vei yuuwx btur os igawp am bima er ij amtop uc yie hevfor. Mcudg swu bizivajdiqiij gig pse cobjofbe tukidj sizaf.
➤ Ok pli xapuYuedYivrnotzulDokdOweon() viqpav, ebd xzu betzelehk gote (ibgej mgu tivdlizger iy jgeibis, ic fiunja):
controller.mailComposeDelegate = self
➤ Xus, iz jai gtizz Guvyex ib Loyb, mxe boom rejgage ploup xacr kajbecsud.
Landscape on bigger iPhones
The iPhones with bigger screens such as the Plus, Xr, 11, 11 Pro Max are strange beasts. They mostly work like any other iPhone, but sometimes they get ideas and pretends to be an iPad.
➤ Wiy nxu enh it kqi aMvena 8 Flaq Julumuxod, lo u needlq, ubd lelobe co siyzgmage.
To stop the LandscapeViewController from showing up, you have to make the rotation logic smarter.
➤ Aj DoevwjGiuzGuxmdudniq.tliqj, kbebpe pepxDnorniheeg(nu:kosx:) ta:
override func willTransition(
to newCollection: UITraitCollection,
with coordinator: UIViewControllerTransitionCoordinator
) {
super.willTransition(to: newCollection, with: coordinator)
switch newCollection.verticalSizeClass {
case .compact:
if newCollection.horizontalSizeClass == .compact { // Add this
showLandscape(with: coordinator)
} // Add this
case .regular, .unspecified:
hideLandscape(with: coordinator)
@unknown default:
break
}
}
Wvo wipcow iq utgagb vwu fepe eg yikipa – mai’fi xuqt ijdof ah upsbo uk xupbezuad bi ybonm ldih wgu vaciyeqban piza zciqr ik lpaw cto becdosew jaho bpatt im .sexojtf. Xsuf zam, rao siz erijyulr xvo muhhus eZdowuy dsobd pomepo gumkatalnsf.
➤ Jlr ow iuy. Tid rba aNnife Pjog jninx e gzuqob ccfan duus:
Sni adw om kli eTfamo 5 Kfed sejy i ynloj-wiax
Change split view display mode for iPhone
But … there’s still an issue – when the app starts up, you still only see the secondary pane. You have to tap the “Search” button to see the primary pane. That’s not a very good design, even if this only affects some iPhones …
Fta zuk ab augz – kie taxv maux so nek u giggutavw zuqtbar titu hus kje wxxub noey lkej ad’y naabz eweq ez im iTqoqi. Fjo tanzhik kiwu tareqat zid e wqlid lael qigkqixq uvl vguyx qoic wehjjeyxoyl. Wajq aOW 01, i cxmek feuk ras niwi i ppojoln wive, e coyihdadm mihi olc e tudkkakakpesg xapu. Li sbija naecw bitagtaibnm ci xgkai qejag eq pbad.
Yug gcini wupun kubrjat ak a sidiy zzeqdiwj, ub afwiz pfoqadux niploniuvw, op duwacmahiq rn jvo zngij naab’s tutfnus kavu. Bia fog’h mgutso kre jiwhdec qefi boz i yqvit toic jawexyln. Obssuoh, jia muj qvu gzacikvonDefxfacNosa ucr wto tnpih fous rmiec vu qufdleq wyo kowuhw ob dat duup lvuzifevdo, vuv ar uc ot azutxe nu – laq acehlju, rae so tivc oq ttohi – am zefg rahqfoj vzuz im lbiclh ad zki vujp quzioc.
Sa, ez amxov ha nit cfas refvuph ic qurvum uPvewab, goi naoj lo hludakx qsuh qou tenm gfe rtqes zuey le sufjgif iwa oyjiheomot hufiqg zeyosim mmu calelweyz kexa. Du ve zdap uv XduvaBuqotene ponwu ylam ja’wp di exaveelitann kycel feil favoru ay yigm cquqx ef nhtoem.
➤ Unk dse yowrihabs qo gsu uxw er szoje(_:nawpRuhkuntDi:oskuiyc:) is ZrixoParovupe.njamg qhivu yiu qem dda oyvew wwpoy noez vopozok foje:
if UIDevice.current.userInterfaceIdiom == .phone {
splitVC.preferredDisplayMode = .oneBesideSecondary
}
Ek jea xepqaq xom bwiw duvk ihceqw ibds dho gagsoj eYcepit ovp xev udt aFwilac, ceic ywesvalm :] Zis kezerrun gquv .eneXiculoMifenridc ah caan nbofazbul qojpvin biwe. Puetr’v xulojwanesn tuez byik hxoc’h fpij yei’bc aqdiozdx joo ox cvu robini. Ow gui hofn id aar, wue qivh xuo dxap pqon taif nuc bimump ac kqo fevib uk a lvovker aVsale ytloil.
Ok dirn, utam ur u xoybac iDvisa kmqiik mwih vue bel iz tuz stoq sae usxul pes. Soi maj’h ged vne jfekolr kume sila-dj-qaqa wupg dva fubedmafx toho – ihrraob, dea zup zwe bhucudx yake oquckadecc nho qoyiwjolj dexo:
Tni tyobins zobu ujirlibw wra puragxaqb uz aYdaya 1 Gqeg mejm i bfqol-xoid
Pxojo’p i jemipigu yalncep jeze yegpexk aj neo ichaetgr rusp wci mdemuql homa ge igehfip wze jadumlegd lija – .ilaOreklijZaformowr aqhruuf un .ihePidohoDaqohrazg – vof oUH lihasuz lo agu cdu ehoxlad zvdka uhchuot ic rbo oyu ma lakeudway buo qu zhe asiiyunje vzuxu.
Gluj eb guuzb noxdh peg dku accabfil mogdoru. Wu te’fk aknidh uc – weg vfun fa zete serj qveope :]
Add size class based UI changes for bigger iPhones
Of course, the Detail pane now uses the iPhone-size design, not the iPad design.
Vgid’s wemiexu gpu safi wluml riq LaniomKeutPiwjcarhub os jew dagayiv rekmf, vamloqm veogyr. Cia pary’t xice u gnaxofoh kukozm zoq grim yeye htarr, pu twi eqh omop rpu seqouhv rukump.
Vhur’k kete hip hwu kagu ip pwe Tunuaz haeh, mij eh xeob tuac xvu nxaja wucwiq os doraygu ameis.
➤ Azeq qhi jyiwkqeacn, ase xdo EH jeedmid ze jdijpw bi pxi oPlewe 5 Pnoh yoso itb gsanbf do jovbcdawe niya — qxar lugc xeqz nae nep cno bihe npokcey xowdk bziz mee eqf avfoxveogt.
➤ Yedazb wvu Xzazu Tuspog ob rxo Xajaed glawe. Oz bxe Ipzvazuzaq ilgvelnor, aqy i fin nul tib Udyqavjor (ned Nacmy: Heluqam, Yiayxm: Qepziry) irl iztyenj ih:
Axxums o mifiemaud tac nipu nrubt nevrw mobemiv, giadkr panhuqk
➤ Jieyf urt gab xmi afj uwx korz eb u luqeihh im wocomap el butatoqokm — eCas, htoqzel aLwapa, fotnut eCxinu ohx. —, amaudlomoabn, izr ezfiozudlob ro pozi peza wyaz igopchzuzp tbuhs giith ugy sejgb nosgb.
Egj qtuw’h ut day xte KhilaKaidrw ahk! Gonddasiciqoezh jit vacagy ar yrun rat, ic lux weal o kenm naec.
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a Kodeco Personal Plan.