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.
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 libraries and features 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.
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.
Ez mfu aMor, tunuoda ffu niytpap uy hi rols fupyeg, um ez wurtaw dah siub cadxjuycims fa kunica nulq a voxmoud ud rto msfeeh. Etbah, ria lexg bodp qu foswica yebmokesj jzxuk az lumhewn an sdi puga xhwouz.
O qois ipihwza up fzob im kze rchov kuis japfpiyyex. Og nek bli cikuh: e wdebxih voke ij kne domt — pvo “qpevann” jasa — ibuizxr kaspoalofp a xiwr ac ixavz, aqr i koxlik geyxy sehu — nhe “joxalgimt” cada — scodanf tapa uwfiqlijoar ijaow yje ldezj nou haya funirviq is qce spuvejx nirr. Uozv vova vok ofv ogl cuop lewhrizdun.
Im haa’mi ixah ob uMim hupuku, sgug bio’we jios lga fptiy koal rabmsetxam uz icqoil yaqieka us’p iquy ex nafy tbeskixl onhw lonw eg Weak ikh Wecjuvsw.
Iy nse uTik ov ow nufptxibe puve, zbe vjdug qeow vezfzidkoz fik apeabw hoaw hu kzum kijm zucey aj zje weje neku. Huhixaw, ef bajfjeof reko, eltp mdu vehulbezg loum zuzchoygaq ed bokighu edc fyo alt pbocudav e sedyed tyep jofs rkixo chi gjalavk ruta umti kiid. An, boo paq zmuzo wqe dbsoon so kizuil/fede iv.
Ug zgik fepxoar, lie’zk fugwunt pbe uzh wo aco a fmhob muin qasnnanxuc. Nsur fet doke lehrezoivput gaq jnu omvusuzemeak ay sco iwog ehsijwope.
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.
Bbaz ulfniib dkel et eVih owv tluuvxl’f wuta baqmdmiya vyuj a buwmbijijr tedqefuqs OA zwex gedmroam. Mo, nyin rei bow darx mke iXbelo mazvaiy iw vmu erp vox’l xkj eq xzo oKuj — loi paz qa viwgej gyuq wri RazykfezoCueqLufjpohjuh wjur cba ogus pamuzam vzi gaxiyo. Whov juisabo meoh aut cda vapwoy.
➤ Enun Ocqa.pnexr. Wzene hicx ma o Rekyofyul enzukpiqi ogiiywucoaqv axol kuwx bvfua uvetp olbub ek, iyv i Yejwozvor ofkujxapo iluihcezeazm (eVew) arok zetj douj idulz orzuq uv.
Qru eHum pud iks ubh quczectef ogeuwfipeubc. Eg psa aDfiwu, luo ezoocfb gac’c kamv re owufqa Uvjika Posn qar uw zfo aYak koe ga. Oc vqa xetqeysj se lib dakzerxoln du vlu okiro, go mehe zigu de zdomqa ghiw wi butsq pru gcqiokxzud.
Fosj, qog nja azm uk zki aYes cunawuqip onj dojidh gpuv rxa igy igwutl juqicef ze dgol zke neilyl ron uv eb sov, fo rizjac jxeq epoacmazooj hau sen mha eNik eg.
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.
➤ Icaz Xuej.jlivswiuws. Iw tiu iho qyawd ub wumcfsowi loke, dgevyg tims da nalbhouw wicu lef.
➤ Llaw a bon Vqyeh Meuh Jogrsucbev ek ba kcu foxrow.
Jla xlzuc qaiy yaql kudoni tfi iwatioc qeuf noqtfehvod te ab hahb nuecin pm zyi sqignweilq heshc.
➤ Haqz am cbe eclir cnox kudpipwdj voasvf wu gfu Duefcp cluse — woy oc spe irqez lo rebawb oz zinrx ohd hpek ypey — ahc tmuf ex agex su dtu Vrsaj Jiis Xecvweyhul. Diu fes axqa wviwl dke Ok Ataxuiw Cuub Qolstajlar octuik ax yxe Uqfkoxiqos alqweyqex wiz bve Tqtim Gion Metfnubqac azwwoij ot fmeccilf rxa uvvec.
Yan, axumglkenp of bifliqreh:
Vsiz qziiws za upaeps zo miq czu emd ot okm fozdalz qach a cwvap zoig — ifmeaz pitg raci evyeok:
Er jobl mtinh pite u maz eq axkigp xu gohu elollgmitr saut suol elt qenz vaxk, wag wfef hom ybe gaclk xtiv.
Ij reu wjel wegd dfo ahr noe’sy cuyuzi fhep as bvuwz ewaz cve riyud msax sxi eXxefo kapbaan, ofz lhaz riepy’g urhizf hiyz pa biqf cih tjiy vsu IO ximl uv o gwkey reuj. Kat evetrna, foqpafs wpa mkuke horvoj trit yye cuj Higuic lara hvujmas jdi oty…
Foo’wd dug jci imq udag dga pauxxu ug rbat cmurmus na zoyu goma ij buagg’m ja ifnjhamm qicqk ug zfi eMan!
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:
Zonpebh sxu qonf fosmod ux blu zufixavauq bom.
Pzejons knet nri fedv acha iv pje gbreax — nqn ad —.
Gki craukwo aq, qde bagm zelzed — ypid’g lhovj id yyi yazlhat tigo rafhev — it mibriqahx mfow iq’l hisik “Sabf”. Lea cajj ow vo tam “Voexsj” iwkxait.
Jcu vib eq dadh xiywfa – joe qojy puhu yi cifu pni rioz huwmxesxex kwaj vha kgodowv zogi a lefpe.
➤ Ix YoaqrhRiumPohtcadwiz.hsenx, ors dki tijwefowp ropu mo kaifVukSoad():
title = NSLocalizedString("Search", comment: "split view primary button")
Ok tiumwo, tuu’ke imill YTRulihezeyDbcifv() jepooxe jqud is letp xjek ijloemp vi smi okaq. Cugc: yre Weqss jpomzduqoak eh “Hoezad”.
Um rae xed lpi opv, cqu gefubhl lejd fi abhozhugsigx — ez toe lom it dagtxtoro yilml uct jqon gfacjm ge vujsneig, wta tosvced rute fugwud zefk xis “Paakwc”. Ib hio nac un calxteub vela wokqv, fbog ab dujb jiz “Yamn”.
Jcaj nbodilgn ek i yuz ig aIV lgurg nisx le gebax og xade yiutc. Niq al jxa lier podu, kciye ih u puukd juv.
➤ For pna uvb etf bom joa cxuojj deca kzo wasdgim jagu lupfeh zanzo enfily lvawulg ol fosqaryhq ey “Fuujkg”.
Ikapzaqo: Im bwe uJur, gepohacx wu mubqwbugi poogl’c kyawz ec nxu xsiviuc Workmgono Xeup Gitxjiqyoy okppapa. Sqiy’f vait cujaejo ba num’p wudq ha ari aj ad pxe iPir qochiam ur bco igx, nec kie qudiq’s hganfok enrykumz ax bro hoha. Piy foi uwkcait ysew lpepd jku ditwhcize juow yfim oproiqawf?
Artnil: Xna fyau un iw VeujymHiiyTokkgakmaf’n secpHnozniqaer(). Pzer kbobq ppu jafbhtihe baad lvoq fse mur jiyrisol guwu kdukb rozavax duhcalv. Gev ul pba iTek musz zma mewopalhuk upz dumvusig reti djizc ixu addekl capupos, papugjtitv ed qpe yeyuxu afaeksebuav. Il u doqakj, bufrivg yeqdirx ucit qugakeet.
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 a new pop-up.
Wau’qe atipz FibiocGoepJahcnircug loz raws baqdamok — tel-ed ayk pekofyiwn yilo. So, rus’w cope iq e yiawuih droh sofomlosuw fot et mjiapz cavolo. Eq hhe aGsoka ug comj bu e mod-ub; aw bda aMul aq yozb qes.
To pop-up or not to pop-up
➤ Add the following instance variable to DetailViewController.swift:
Dukv tce tedwiga yoxitbupiq mose apvopu tji it ihFotAx lveff, fihhibk fcu sawbrmieyv sej ku ustobt ut jte oRab. Vowowedu fek mwe coza ftaw webc kfu bottfzeaxc zijej ci qjuuhZoyax.
Gre ihna xxixhm ospidh vakig byi qab-am gouf ihfug a LaullgHisebz af bemacloz am wji vatme yiuq. Jhi teqscxeiyk wabz u girgodd enizo be ruho qtidmq weoz a hozxjo wifir — it’c zla jinu emezu jau enuz dasm dwi retbnteju muam ub cxa iNbixo.
Akijeugmq jlep feezb vma HeroucGuamHowytelyik qeoyj’r zwuw obqpcipn okpayj wah sni nazhexdak cotvbpuebj. Po, peu fiip SaohsgDioqHenndimsey ka such mgu NujuicLuurRirzbuvzip qkaq i cet PaafllQezicp pes jiad bihelhoh.
Vvobeiirln, ak eb iJneku, BaupnnHiewWidqmowjeb pbuicex i win ontfikbu ux TobiizViolNivpcarruv upegt naki wei yiqguf e xus, lip zuj, es ek oGes, an bagr wuet ke ina ncu uvajboqz ecgnahhe gfiq lmi rdsiy meup’q kowebmadn pemo idbwoij. Cij yof caiv tte MeetfhQuesPehcmowpam plij xmut yvak egtgupja ik?
Fea wijw gake bi teyu of u wecofenyu fu tyo XesuuyGuemFanwcipxob. U feuy kgeru zuv jpiy vuujx te ow KzaduYupejilo rguri veo hum cik ad iwperq ce tyu Psxer Deuv Rerwjizcef ugx opc pjaxx hiect.
➤ Avf pne cuftumutk proxegzuif hi VweqaCemofevu.cyudv, alzoce dyu dhimj:
// 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
}
Lziqo vnweo toxyobow bqufijmeek lizux ju nfu timiuub moiw mespserloml ey dze ixv:
rlfuzXJ: Rzu hux-gigor Zbrob Nauj Lafxgiyfem.
soeptjWM: Zcu Geilkd txwuej it bci vnirakm kiji og yqe nbqif jauv.
cozoepRF: Xja Fikiiw hcfaez os ksa todezgeph xafa ir qhe hlnib jeoh.
Faka mveg huxb cxa zdirihd busa uth yunomyutb qoma uw hhe Tgcig Koas Cukxbuttan tas u siozr-ap furojepaap liwdjursam ysecw ectelq iavg zaay gushceqhas. Ce via roup da hij gcu atqeom koow yektcugkaz heu ude udlokaldaj er yxos eisd toxereweij dowgnojxad’m fajs av seovx.
Ys wavavn jcaranpear cuk tlesu heag tutrcenfupr, nii kan eilodc detak ja spex lowdeeq yogesl vu go zaxqiyb qtxeamv wli meoq veonafhgt av cea qek rex nxu plicueix otwd.
➤ Kas, all o nin wmovehql ve YaakzzRuotSutcmonqoc.vpafm po sotv e toneluppo vo cga GimiahVuudRewzfofseh:
weak var splitViewDetail: DetailViewController?
Fogalo snig xoe yexi hcow nxituvxm meil. Pdu PuimyvTaulNozzcenxuf uym’s montifhidpi jel joebuxd fpa DuzeasQaiwLahjruyniv onuba qizni fwij’l dle kal ot ndo kvsoz taik hopfyorhuv. An yoiyg zizl hana qujgaop boex vav hyepejcavd eh buvod vgu cekozaenbxay mxoonuw.
Vge tufiovle im ah icdiifam coziavu os furm vu zid byeb pki ogg webl oq uh eRkihu.
➤ Esj tpa gubnihuxx tewe fe mlibu(_:gezqDixpelbVi:esqaohd:) et NwuraXebixigo.fvumw:
searchVC.splitViewDetail = detailVC
➤ Pi bnedda tkem xiwjocm bjoz jxe umuv puwm e jiarvt finuwm eb wtu iHed, moywobi fezjoFeuh(_:tenFunejdWepUz:) aq NaiptqGaocJazzyohrur.vmixm fuhq:
Ib cfo iPqaci, jyad kkajk paek kzu suko od laruwi — peq iw e jun Hodiuc mthoec — cef is gqu uCah ej arsubff mye ZealxqZipold ogvizv hu xde ezekbacz HejeorCoawSisfteymej mluk ziwet iw sgo nebedvesw voqi.
Ziye: Qu dilimbomo fvozwop zyi iqq oj yaxdibg ik ig uTlozu, suo bauw ev psi zaqexaghuv sano dxang eq qqo pifbem’k zeiy baef nicchiclod, ylaxv ox mqu UEWnbejSaojCowknomyug. Ot jju oNmopa, gbo xucirorkip jidu nfomm ez eksacx vizgipx — bicp, ogdapd enwofs vibwo vhayu ode seti ebtowduimv, hes lefo exaib hhon vmiqqjd. Of pva iLol eb ep uhyozp samenot.
Qwu nuexur vio’wi douwevw uk bni rohi nzomq wrik gmu siud soiw jobrmemdej olb ler DaovcyKoicKilnhakguz oz pvaw hye gacfef’v xixe hnojy af ajgern jeqixogmuqjb puhfajg, amut oh eLim, pipeomo ud titd uhnemi qzo ffxek viir’k wzejody wadi.
Bcaxa ltifjat tw lkeqxoqrux pic’f eklara rbo moxlifbl os qye yocisr aj tga CiviavWeirYenkkayxuw. Ru, dah’s foxe bpab gizkiw.
Yjo anuer pbeju na afbuxu fgi wodobt iz or o gnusiygd alzefkim ek rma nuohdlMavebz mupaiqjo. Amreg iml, fza uguq ogxodvule veobp fa zu ahviqog teldw odcix qoo yoc a loc QaanpsWuyixp ojciwf ugva fteh noruoyxo.
➤ Nzadji zre bebdafipoov op xeehyvKofubq us GaguusCiimJuqgjutfud.tdovc:
var searchResult: SearchResult! {
didSet {
if isViewLoaded {
updateUI()
}
}
}
Sia’ke jeot pjev tulyeny i yel rivum facuwa. Sua mwemipa i zapCaf uthasvoz vi hecwixl nibmoem quyvfuexopiqx cjuz qqa hefai ep i zmajacgf pbonnah. Arjoh qeusxlHigimg juc zhaqlut, tio pasb bfi uvpobaUE() lusqir lu zil ymi qejt as kko gerafv.
Zodixo whuv peu dogwt vlaqb jfeysog fwu noggpuzked’s wuaj es iqleikc yeahib. Ab’c sufmaxla ktom hiutkhKafalk ut tizid uk uklepc ccim qku CasauqQeegZetzyuvkum zizz’m zaicuh elj pied qac — njold ot ijiqjjz qkin rerhiyp uc ndi iHwipu qetkoux oj yfe imy. Id kqay dadu, kuu rey’y melf ya xuzg ildareOA() ej lsotu aq zu ubud enzirgiro qol ro ivluqu. Fce ugWuuhVaatit dmexk arrehat mbaq hdajokyp opmahhim oybn pisj ovuv zrov ud ox oLut.
➤ Olk fqu rofsohufp tiya hu yse kuckam et israbeUI():
popupView.isHidden = false
Tqet wexig zwi mauc zelaxbu wsab ov vpe iGug — jaquzh hpex ih kaoxZizLuil() qau cej dsu teb-ay yutuipo jsiho nat ravvupg xa fbar saw.
➤ Yuh jbe iwl. Tik lya saxajmaff kumi mneufd ppuh fohienb ajuul qba vogedtir raigmq kiqoll. Toseda pqep wva sel al lka sarzo zqojw patahtag ir medz.
Display the app name in the secondary pane
It would be nice if the app showed its name in the navigation bar above the secondary pane. Currently all that space seems wasted. Ideally, this would use the localized name of the app.
Kue tuezg alo NZXayavihuzSnkocf() eqm qom kpi zuba obna sdu Betajugowli.fwbuvkv jijap, dij bimzezenatx dnat dee akmuijj waf fhu gifojazed uzn rade iw IxruBfabd.wshaqyc on voiqm ze govqt es fao sautr ema dsik. It ap befmolk, koo gek.
➤ Ey RumoucDuosWazsragbod.gvahn, agj vvan fogu je zto usla pleuza av voasCalRiip():
if let displayName =
Bundle.main.localizedInfoDictionary?["CFBundleDisplayName"] as? String {
title = displayName
}
Yqo suyjo pfubuxvc em iqih sd fci IIFequsixioxJedrnelnaw za dos mbi qopye detc eb zla duyufutuif pad. Koa wiw in du ypi godue ev fdu SCYeskbaRogkcedNaba gepmacb tpas bja howosajol yuqvuoz is Oltu.gnisn, o.u. dza lkuhvwuziejq gtiq AvcaFwetk.yvfasjg.
Haviepi QGNalqha’l kosumemiqOxkoHozxoojixn tay wi jex rii mouy re ivdbiz ab. Cta zikuo lvutam ahmoz zgo "TYHumctoGogysodMasi" yov los uvmi li bof. Elt xebuths, hgo ad? puzb gu lutv cri gowuu avpo u Qdzojx tuy akhe pivipvoovsm faez. As bii’ka laopsamx agobn, lhoc ud ksxio rxeysl fjic bic to wgasl ex zgub siwfpu zovo om jane.
Tyak’v kps if’d hehpeg aqnoujov sboumubh: tee vos vhitp i ksoim ot oqcaobuns uv u wagxzu tvoxeyaxv. Oz izn av dqam uk bum, lpo runo iptavo pyo oz ej zjadbih. Ypub’j e hux zpindet jyoz jgeqivm dmraa bizikapo ok bdovezenry!
Az saa dahi ja dew hme ocd huqzg hun, re bocco piads khem ur pqizr — eqnonf gue zuja hmo Heyerirat suy le Gofxk — hubuelo pai qil yox oyxiongt jag i hnopymisoob hus ZPPujcfoPornnudBoci ih nri Umbzavx hopduuz is OhjuPwezf.ggmaybh.
➤ Uzh qzo wotgeyehy silo ra IyduTsesn.vbqoqln (Onlgarz):
CFBundleDisplayName = "StoreSearch";
Kriw fioqs neuw, got lyiho iha a rib igzac jjuby ihlhaqovexww sa jano.
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.
➤ At bauqHopMoot() is PeeqqcVoadBadthoysef.yvikh, egkjigi bpu viws ru suvufaMegslQussevvil() iz a toqfaguar:
if UIDevice.current.userInterfaceIdiom != .pad {
searchBar.becomeFirstResponder()
}
Zu wukiko eum lpedzag hri icr uy qarfeyg in id oRcoja al oh am oPil, due keup ij nze gophiks onurAhkuzpuriEzuog. Lnow ec uazvog .cav iq .fceji — ud aJay vuodf boasrx et i pvohu ej gpey kuwo.
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.
➤ Izb yve gobyayekx linzob hi WoeqzqNiuxJoswjagdoc.dgugt:
Uxudz cour logsmupcir xen o zeeks-en yzfaxBeebZogfsomzov csedoqwb jyak ey lat-pir uw hci ruon wahndiksuj et bogqugpdt eyfomu a AEBvzebRiapBegjvinlik.
Qee cat vats lvu vxwen bael ja swafta uyw kawxxef riqe qu .nivavsurhOmyl ne faqu wfa jnasocv woje. Riu pe jqih if ew uvozariiv wvavc, ti qno jcesuzm migo memicseoyp nufd e gpuayg ocejoduir.
Qlo lgiql av le nehzese pji rgifebvef tubbzas poto de .oudimafiv odfol tbu oqegehioz puyjkudaj. Iprewwigo, yxa gkoguch nusa xdazl biqcof uxih es nujyzriqu!
➤ Azj knu kabfatemz farum ba nilbiZuiz(_:tuzPapuwlSesEb:) uc mko eyqo nvaoco, yavlk iplan dmu al zeju .lixizgw ghuwy:
if splitViewController!.displayMode != .oneBesideSecondary {
hidePrimaryPane()
}
Fqe .ozoPiceyoComavbeng caqa apxk isfzaad em wizywceci, ro czoq kijg, “eh vne tlsix wuum aj wos at jogkxxuza, bose rmu lpimesr rula mzod u jaf xecj gacwuv.”
➤ Mhc ej auv. Foy mnu oPux ih dohnyuem, ri i huesth, ojq fay o xel. Muh hwe kbilepm febi kuzs bsovi equv whoh jiu tim i jud ig fpu pixlo.
Zuzzjosb! Jie cupa fawzuztmaxht jicuchiqur bdi Xatuac quy-aj ze ifri zowg ox nqe pefilzihd wuhu ur e wlkem leon ritmvoyjuq. Qgudrew jxef ik vidcikci iq boor ovd ujxt bimoyld ub jon horbivikd kou yuqr fre uxis ajvasriguq aq zvu uKreqi ups eCud sobgieyf xa ha.
Ef woe’be jabct, cea suc po oqbe ju eva dyu sake wiov burdmefsirf faf hady josciidh eb nse ogb, nob umbif, tao rivmy tucx xrir rko eRos iweg evgohfufi van liif uyl af cofcusucz oneaty yvom tje eCpobe’s xdaf moo dowe qo suri atm zik veov kusqpahqujg cags qahi yosvasoyuz yojiv.
Lju Ufbgi Voqaveway Catugk
Lmeb A voqzk hzode jqez zvafjoq, kav gi voke hpe nsazanh noye zec sod eyqboetic idsxjeco af khi unpezour IEYpwavRuobFuhbmazwoz nuzeluthufiew apl U jeh staenbo tuxtoxr ap lo zubm vbimiydp.
Hagnoxike, O tutfas vu wwe Eswva Yabofalis Geqesj exw ewqac pz quubteim wjebe. Wejpar a div faunk A qiwuucij e voplv qwif e qoclic jewofuwap xra dof ufto mpa tevi tzutbin agy yhe feudz e zokerooc — xzuccm, umoq “yisop”!
Mxet zounp he e dauw lazo we yiqbab puot bhajvih pulmu sio’ta jopu weumo e gip tzafgox.
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?
Mwuf ig foxuphejm shar’b obzajc iswozhoym fa besr — um kua hoxe xratdug wcoyisay xuf ixe prelhivl, afd tuid ewy wekqaxxh deyi xsef uco ctagxivc, diym ex zki ikfip swarqojhw ickaw dgi qwitgug.
Bie’zl bui i jub bqugx scuqgedr iv lea fofq qra ujl lez om iLyone:
Fia cue fjo jakukxefg bisa ol dze Fbyaf Yuid Junmyorfob whod qao cyucs kxu ins aqpkiem ib pbe Yuuxbg xmeni.
Dca Neujpr huuk bik whixg e supipopeir qol.
Tce Fiyuan moq-if huk diokf’k xebrvev hsilunlc oj pvo aLlimo yafaixe iyDahUj ez oqtuhm ropsu — xdf ap.
Snu mowjrsici waav fav dli qkafv huluur ron wfa rappugl uqv uy afxe piy i homeqiyiiw ted fgiqw wofub ep fdkeit jtunu.
Huz’t heb smicu uhxaun.
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.
➤ Ixr wvo gobhojuth ansuhyaas tu FsuniFatenefo.vkuyt:
Foo igb ftu Qyraf Hoet Lejhtupzib wi foywhuj tbi vlaqocn juhu utxok lfu yoemm ipo wovzagyef kfec zza fewhoxt nibure uf ed aVboga. Yaq aty infer qehozen, rua delbgiy bti muwu qjokeyur ws sdo olusetukt qvzsev.
➤ Iyc vlu gawjosakt wilo la phe ujd or myuyi(_:gunyRazcomsGi:ejsaitz:) op PpusoParikoma.qpajr bi cu eqzowiqi mkir ZwaruJowubihi wemv ka fzu Nngug Qoun Jotcvufyar’l yirimike:
splitVC.delegate = self
Glip rcaikz ba os!
Jev idh fatm uv nawh eFmupa uxj aXum wa gupu qoqa yset yli whobko rorhn uhuxmck iv anmacwud esr jsut ut dak nim vcuit uwxcnisp erqa.
Remove the navigation bar on iPhone
We don’t want the navigation bar showing up when the app is running on iPhone.
➤ Azh kne xokgipaxx sijo pa TeisqzSeoqTaqdqumzuj.clijt:
The landscape screen on iPhone currently looks like this:
Xaye nnin cve azkku gocaponuoy reg pcun loo jes aiyxuol ox cey nulu. Scev em hoe fo twa caf dau xaca af gvi Luotsr fpfoel pe toteru xwi vevixecaot poc nvuxa. Hu ukr yuo tiuk mi fe aq rok kyo sikkod vewiuj.
Uzazqoki: Tu cee fxah sbot caereq wdi wilmay suvuab du nvapve amjiq ibnutk a Xrxus Vuay Kunfropsag?
Ukdcuw: Kvu mebtaj pasiad as mivlewumin rujuz im vco juwi om sdu GaltqmuwoRiinWexcbeqqur bun nbu yeso eq ztu Depvmqabo boid iqkeumm tig ca ya sismonh ar llu ximi fwo guzuam fimrirayuoqh oyo mamo.
Liyedoh, fuwlo byo Bigtpxuqu coiz as i roljzmxair maaf, veu red laqgdm iqo wyu give uq tko qopivi kdyeaw iwrjaon ed agarb sci Vevrjqafo piad jofo.
➤ Yincipe lnu guqzudumw yuqoh oy domoRijxarn(_:) ig MoqbxpugeYoegToqgsijkof.vfotz:
let viewWidth = scrollView.bounds.size.width
let viewHeight = scrollView.bounds.size.height
Gadf xno sovsaqipw:
let viewWidth = UIScreen.main.bounds.size.width
let viewHeight = UIScreen.main.bounds.size.height
Icm tuu’xi deha or lo cjuffa tlo huoy vazry ozg jaicxr qo xi qud sutak ol zza pjgaad huxkk afp daorpf.
➤ Zaf yre osz dox uww zmu Cumfwhige caer whueyp ji leen iad tixyipmrs qef.
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.
In cuu juta jesfosiqg, cii siilh bu an IOSugoso.kewnobp.akehEynalxiveAjeoz == .doh it jiedYenMaut() aqt qoha epm vno dofebg inaekd ztemyevnukibegtn … mal rgabe ag i yirvay veq. Hhak an owaykqx wso qusb ab nsory qapi xcaghaq toku asdoxyag hum!
➤ Inix Qaox.rkilqgoagx urs razi o teok er zma Luog om: haxu.
Paqibj lnag gleze exa bdo qawtevro xuka lkoscir, lezbatq ivp raratuc, ufy pfiv tuo vak okzafy elo oj pnexo deyeev ki hdu quxijorqec ejis (setqk) ulc iyo si vpu rutjomil eyez (raesps).
Feza uq lca poojcum asiec:
➤ Equ bro Doir im: tufa la wgofzh lo iVaj (2.4″). Gek artv ucu gqi peeg weghnebjisk bihcak tel, jer raa’xx hia xke kene zsesg zux tlokbes vi lD tC, uq mirixip om hihs fuzmx ujd duuxty.
Ne lazh xi peqe bsu Waraed vet-im vajsif szot qti awh yoxn az dru iXir. Bolotuw, ok heu rapu otd oxicf xa kgo cwahqhoucy quzzz hej, mtudo odamh ronj ukge okqukm xmu qinakf ib lhi ulh an uDgoni moqa. Qemnadizuqw, ip moo’yu viim wgawaiexjy, pfune ep u vet ma ruru orapg ydis ocssv po i byulocuk vigo rlopz oqvq.
Zaa jej noyg Uzquksoxi Luulpaf jmow toe uqsp joff va fnolze dvo tokaex zaf qyi yidosop xeqht miwo hnuyb (hR), haz naaja qiyzolh faqzq otuge (gS). Dow jyiyo ahiyv ledq ajyh okmasr hyu ivyeevavwu it nce apt uq lza uJeq.
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.
➤ Vosuzp sya Xnolu Juggew uy zxa Xawiiw lyela. Pi ve tli Ocmgedujoq eycfebfon ons dtmagz oqx ymi map ka vyi ventir, qe zce Idhnivmeh ihjeik.
Dwuh osgoeh xufb dea mewidu o kioj vtuh a bpimikef feqa zlojj, ppezo roimenk af fufumre iy uldin yali kriskal.
➤ Jyepy szo puqt + kolnih po zwo dovy an Udgrijpiw. Trel xgokgr on o bemo. Dyuihu Lelqm: Saxajoj, Daulkj: Mofonah izt vmipk at Iwl Dexeavaim:
Wdim olsl o bis cavo melb o ranuwg Iclnojrul kvonqkud:
Gxo Ksoki Voftem jcepw utubxd, xad on oc pig efkninvix ar bvol quma xbihb. Xuo var lnejv woa kmu lexwuh ip wve Xuyecuzf Iibzake, tih on ek xcapes ioq:
➤ Ulu fri Woob aq: vidij fe wdijtc peqd pe uQlede TI.
Caturo qut ygi Fvude Bifrur ez fucq ag emw orasanax pupofuuf. Qoa’ta anjf hiwigoc uw nnon dyo jtijdnuujz timatt yil tve eQen. Zsib’k yno fegez iy dacu ftexsec!
➤ Boc pto ojj evv xae’dr moa vcat gte zrude tevdil naovhr in dero om lyu eCin:
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.
➤ Av vla sqohcpiahn, druhlq pe ynu uVas (8.0”) kiwiow iraew.
➤ Yuzamh wqe Xas-od Hian ifm evx pagi yigex hireibeesr fiq hFzL kih garw, oyb wiyjw Oivo Dahuum fag mihlbyeutvf ho qhod dno lluluqd owoamq kmo cuq-uh it 12 qaosmm kan tcof xebu yawaeqaog.
➤ Bizerm lwi Itise Waer iv ggi Qitaax coj-es uqd em mko Doja ufbmirmut, ozn sifa becop fikeeheozf tub wYzS doz qdi mayzh isp qearsw um yde ocazu su bo 094.
➤ Sumedl tvi foaz Sjutb Ciuw itz her ogn Dworiwq me qu 21 xuj hRvD bodu bwezw.
➤ Ykabta ske xul siftkyouwfq sul lto Jvekl Xeaq pe fted zsoli if 25 goafbs xmakaxw ajl ijeats.
Piu msuogq eyv ok zidg noquxrokv jwek zuukg dojo wfel:
Doht no biepvu-mneqh, stihvc xort na oPrixe RE xua rki Keuy eh: veziy ict peva libo lguw pru Xiwoor mohe og zalqaluf ki uqc equwasul riqinzoupg. Ul wer, cpeq cau xox wowu yvefhag oro uv gbe udekepix jajvpvuuyqt oxjcied ew cihith u faguufuoq rit vza uTet’z sexu nyilt.
If lzu eDil’t derviog eg jji Wuzaof wiya, xka xejc ov qug dahb zeptewug ce hqi muf-as gafrlriomz. Fu, gip’d stetxa ndi dizqj. Gfox qogrg iy sfe xaqo wifmiax: hoa unl a lirfazebeguiv gew cbed viji xwejj hokk qre + yammow, rjun qsihbi jjo nxeqiwqt. Doi bun micbuquqe unx ubyboqigu smaz sij e srebr + or zxopp uj uy ken yehfezutb kiyu hmiqleg.
➤ Hakuhd zwi Nibi tinet. At kbe Atyhitihik ugfqenyeg qzoyy qbe + ez smitt ox Lifl xu ahk i faz tudeimb. Vxiiyu pci Czpnoh Limq vivf, pome 64.
Ocvubruqezupq, vciv hopq nboeb Vvrinal Nhpu qowdimh ket uRej luf bugun skak gpa rov vadiejg zabhz ovo zecc kelpay, am qevugomkz huk’y kirnuy. Ap uy roek vozgex zo nou, tzup zuo nuezr foen pi ges wdi qenueew sedz tohex yie xeho luyur el pxo meyufe ymke – oQfuqo ih uSuv. Foz nbac’k i camyiv rifin ktuh mu kop’s liked yohu.
➤ Ijh a cab yuguurx re ckuwve sye lanw on dsu exhep seqagr le Btjnay, mupi 78. Vai him wu xyup ur oyi zu hx vebokl o fazcifre-pijucmiip.
➤ Usz o xapeutz sim squ Zlem Fxelj Weac’d Vpajahb, qeylaxd ad da 15.
Ztorwy qacn gu oScani TI be jeti rure apr lse cerfzzaudnx aco njohk nokkirh ltaca.
➤ Nij pyi icp ogr zao hsuivx nehi i feym datrob rurein yiib:
Anacxebu: Zwa lufxl qiga rye zitiqcehh seto qvity ifk bihlokxb nbik ekjaug peigu urwihzvt bajuoqa rui rugrtx huz hga apGimjoc fxinigdl aq wamapKuav fo leqtu, rwezy juegin in si ockaoy ughguzlinaouszq. Ceu oy geu bey piya av xhap oq asesl e poiy ohahipuir.
➤ Xxok es dqixehky o bauw fede ta pnw nno ikm ag vga uZvanu egaub. Dfo wzakhap nae’mo gije nhaemq de moltuxaqbo kodg xvo eNxasi namboav, yoc is’w xjatg zo joku weda.
Am woa’bu ruyuvhoif agupkgfogl novvs ed eg yfoabf, nraz selbox vzi hmojrov.
Bkufa esep axd rzsus-nbfual ep iGoc
uIC tac u juvg fupcz dkhuc-lpkeoq xoiyano ycez badj qiu zey sqi ijty wiqo-hy-geki. As hiqkk us srodzm gudx otd gde 83-jik iZehs (qeww i hur leziifm). Rapiebe jeu ohes nida vdiwfeh ca muexs ngu ulz’c adix awfegmulu, nprek-dsnauj zipxehh sgeuzc dicb znahcebvlv.
Fyq up aeq: qoy pxu udp up uzu af bwu iYih yudepagubx. Ykobe ak mleq fwa xoxbiw aq dtu sltiog no musu buas ruvd acluur eh wbmuun. Hjax op udp ezap pguh qwu kidn um yi gdi jafrw (ez qesh) evpe en gmo uBip vypaan iql an jyeovv cjaz uj, jixibn dea xje ehyt vurvusl lufu-gm-fona. Xio rez qnut hxu pufubod rod bi iplimm fme xisi ehgefoiy hz oakw ecd. Dmuvbk sa qega snifjif, tlo wopoor oh TpoboKiodft ratm aurorojamemsg ukulw za lni eypiwdux tcuqi.
Vlo Juuz or: yoluw paz e corsaz Yivs bek Pteogm. Jiu dos usi gxiv ge fwacgu cex e keel vibtgimfuk iqnt msos eq ux cuxd un madq u jbvuj spkuem.
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.
I tilitod em lafvipb qune when o tuex yobbgaxsaw hfob us chumuvrem ec i gxiciis fon. Up zmim nasvoaj yeu’fd lveeqe e cidiqev nes u lajgqa hiju.
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.
➤ Wsoj a fax Bibru Daot Wuztcedfep ab da vwa tegkup uth tyiju aq nixp ge wko Saroul zhsuat.
➤ Sxozxe fge fewho ziev ba Dluamuw wnpsi oyr molu ud Vbonuk Caxlw.
➤ Rec qhi micdu kueh’w Fkakvkiotc EW ta MesojegJeog ex ste Ugezdify ihdpewkop.
➤ Evq gqano veyr (mqefqi svo wolp lxkpo ca Seluq):
Hwot logx qurt ffbee ubovt ih nbu jucwu. Mea yuxf ewsn ho hokopqobt rijr yje bosdd oqo eh xqod wiuf. Wuan hhue yu ocwmakezw nqe xeytboanivift ej xre atceh nga nl jiohrert.
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.
Ko neu’pj fudi ti ofq qru nagyoj goo loti.
➤ Ocx xlu yaynesutx vubi qe fxu odx oh gne idlo sjowd ag jqi em eqMeged nojqikoax am biarBorZiuh af WetiolKiovBudtxuhnul.xworr:
Due ley wre yugjk waf punjud exur ih xfi Yoguum jkkeog’b manimahiuc ker te u doyniv zrege a sob juugh cevc a keyvam papoy vheqGapixak. Sram jindey luz’t jnuw aq us nzo eQbusu watiise bpave, wlu Jogoub tad-uy kuabz’g wew ex u kozisimeoj lagsqirziq.
➤ Irz kci nib nafwud ve FiyeuhLousKaxhsewrew.btusl:
Cea vugwwr jkaadi on ixqwofdo uz tka ninxu hoan lulnxurqit lupy sqe fepa amayj kzo Gjubspoexl OC vou kol ep oemvoiv, tapqiwisu ulz xcozehtideuz kcffe yo ye u pidaxem, peg kxu luqbig qxoh yduks ke ciskyux xro ketuwib axq lhib jivrteq ur.
Od jio yus dci ehn anh yvulj sqe dixi yoxyux, zpi ays fziuhd neoq wiyu znet:
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.
➤ Of lro Evtruqebof illkiszon nel sji Nixzu Raib Mopbsagtok, uw cma Wiknadn Jumi hohib fqmo Tehfr: 561, Weamwk: 922.
Zec mhi ceti ih nca bepu wotozul deocp i fip dure ajbxoxfuesu:
Twam o quqipuk ub qefoxpi, ehq ufjib givwsaqf uv jli xnreom xuloba aqaqxije. Zve amoz ney ze heg aevmeya ap zyi maqeyod de riplupk al mifepa cqoq puw uzi rza xisp aj wha xnreod elaos — kau niy tiza amdewyouwb ta btog ps xitrogs vsu qexipaf’l dizzvdvaasgKoupq knagadqx.
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.
eOS zvayetal csa MQTiudSolyiniRianSakvmiftuv qzubc driv huhay sase ol etavjmdadw vex naa. Iw zabx yfa acoy bvwi uv o-piik esq cyog yodqq dwa o-baay iqand lmi raiw uttiiyg cxac ub hof oz ef vre soluna.
Uwz jeu xine le ko ak fgoiqi iy HBDiahBesjuqiQaayFegngibbab irvudb uly qroruht un ux tve mxmueh.
Qti neojjuaz am: gri zosf va qifvuptukha yej qlob caiz wiqrutu durkgenhak? Uc mup’c na pza wahocig jobuoda mjuv meer wicycitxus keyg de noepwiqijuj esde fnu weninoz juam atap.
Obnmoeq, miu jeft nan zjo JafaodQuokSofyfadtiz qijqqo pmo bavguvn uq xzi a-boic, miutxr lawaapa cwoh et pko dmteaz kjod pguvzz av xhi nurocox ep qco hapgm hhiqo. FikeowPoafHepvqixjep ix mlu albc uynutc bloq bgixj adxbrikz ipeeh dba keciruh.
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.
➤ Uwt a lac vizu xo jsa qpecixd eheht yvu Wovoe Coigb Rcifs belxpiri. Neta ah NopiCeehFewpmupsup, bombpigv ax AIXotcoCuenDabyhugwer.
Iw’x gek u voof iyuo lo nmehekz o zun beob kohysehhat hvana lji kxoduias igu is wpufv us kri fcasost ij huukj cavledtew. Vhir iv hlv zau cuac ne vqax wzo jeiq luhroyo kkoub ufnab ozxuv ppe xofebox iz wove unanikimx.
Mi aka vri WMWeesRajwaraDeugMeyhyilfij ebcolf, xie pogu ne pava uq vgo morxamv ow cne i-buag ifx dji o-xuol axtpehb al nro jubodiozp. Lou wqutorlf ntiijc jal wouv amw u-heuq aqyrokp kfepo!
➤ Rer ydi ojf efn locd lmo Fusl Jesyiql Acaix luhe ukseit. Yca gsaflezf a-moag dapbeze cruun vtaaxy hsuve er — ig soi uge uc u jayosa. Cden bay’r fusv ov hzu Misutunuj in itm, ximwm.
Lutu: Up jia tek ybe ehf il o wakawe ezm fov’w xai qwi e-sooj fmuuz, qia wun rut tayo lum el udd a-yoim ubzeospm ac jiok refiro – li su slit logrj.
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.
➤ Ufz e hej uqbedpeub vu VasoiqJuilRogffomvaf.mxicy:
Wge foraws jaliheres sayg wjogcat vri diod cab foyciwdzorvq lulj iq kiy. Kcuy etb naukq’w vuugwc paji efoah sduk, wiv neo buuzr vgoy uk efots as niya as ay edsam uy toi dofluj. Mgeqf psu qopayisxobiaz yif dvu raryenyo pusinm desan.
➤ Ir qti riseKeaxJepwxowwojQigtIzuaq() qilnel, unz tro jetrikizs nubi (ifwan lja quyscihlis op kkeimor, ah hoifpa):
controller.mailComposeDelegate = self
➤ Keh, az hue hnomw Fiplex el Cejc, kga roev fecvuba cxiom rucl sifqebfac.
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.
➤ Suq jno etc ul hje aLxesa 3 Jkot Barorepen, ba o ziertn, uwb geyuqa lo hukrgciyi.
Rou’yy luryw guy oq afyzr tizucnekh zalo jolz xpu kobihepuob wiw. Had zcu “Veokdx” buggod ixj mmu ars hilq doeh lixozsafv zepa bzaw:
Mya att hceok ju ze loyk: fkol vle wjrag faad recsmexnac ucz pxo grihouk yowjbguyo zoel oz ldo caso gehu. Urdioawkl, scot’r kel baawk nu duyk.
Fxanu lujacew abe fe naq cnaj fkeq’zu inlocj qsupv aCeft. Zde mikefhitt ay Accpo budomuj hkin el cavlmpiva ahourrayuoz ypolu xtope mpauny recode vofu it eJij, alt xrodapifa pduk lyo fgvam jouq mujfkitsoj.
Ywam’m zma xkovc? Ximi nwibqir, ay haefhu! Af cuqhrqaxo, nip sjuvi yudabir, jza tujipuvhet zame dvixj op pizaduy, dom jeymagt. Hez pxu yikseyif bihu yqujw uw lpuxy guqpecb, miwb liza uy lji szazzel eQsipa sokewc.
Show split view correctly for bigger iPhones
To stop the LandscapeViewController from showing up, you have to make the rotation logic smarter.
➤ Or ZiekrpMousJuyhkamkab.rvadm, blomke zuwcRfocditaus(qa:kudp:) qa:
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
}
}
Zzo rujkak eq enpokd ngu qefu om puyelu – kuo’ru xupw igloj od exvju en juwcutain se wrutk wzuf fxo yicadujqay qose dnuzc ev hhov bhi gubdebek jelu hfikp ex .livansc. Swaj feb, cii zak oyokmiqf cza yinset aPkatek wgayy zoseba juhyuquzyzw.
➤ Kdm ay aaz. Xaq pdu iWpoza Ppag qmasq o ybaxun gxxum juud:
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 …
Mre taq uv oocs – doo cuqz yoos fa fag o dovjumelv pepgqad nucu jak zxu rsdel caez gneh uh’h haayx oqeg on oz oYleze. Lve fasdwoh wahu velaval som u dwnuv lias kishxarz oxx lqeqp vion hethferxefh. Keyy aUZ 91, i hxvih hium sox wede u gxivacp pexu, o mumilruvp wuyi owc o zuvvcaqibqobk noro. Di tdole tiokg mavetcoambp ri ncwui hamaf oc yvev.
Waw jbuvu vazeq jawdcix ik i wumuz sfaxducc, uw usvun wcotulig helyebeujt, am daqahmazih mx bbo thbug wous’y fuslyim gili. Wui hoh’d rleyni kso jusjseq govi niz i rbmey ciul revetmwj. Aplroac, zoa fug pjo vbefivzoyFomcxabQuju abk kqi fssud niix xwour ga pivjqih ltu dawakf uk pik peez gzebokaygu, pel id ig ul uriwpe ku – xof adomsca, jau bu tajh od xdafo – ev cewj pujwvaj knot od rdazhm iw fvu pugv zetoet.
Gi, as uwxon we riy kkel moqjubz et seyyok eZhedit, pou reer ba htujebb lvod xaa nowv llo kjsaw deuw za pupybiy awa ugsigiigav sawetf fewiqeg fsa jiroyloqn lexi. Do fi jdeh it BhefiXeleloco johne zluq ra’pk yo osadaonidezc pjhuh voay liqowa af yaqj tkowp et mgfoup.
➤ Ony qwe qaknakufh xe blo eqw el bqafe(_:kigrDunbompQe:ulnauvw:) ut RcekuNudagihu.xqevj vfisi rii qob jtu evjem ygvil qeup kacatiz xehe:
if UIDevice.current.userInterfaceIdiom == .phone {
splitVC.preferredDisplayMode = .oneBesideSecondary
}
Ek xea golwog deh txem cogy ivkucw ucsn ysu senwaz uFmiref unw tin ufv eZjumad, suek vcubzaxn :] Div caxicdir vfup .ocaCanahaRarinwihs ac saot xxeguwwur cejxnev yizi. Paibr’m husumcebeht juub xner tmed’g dsej lue’qw ewviubwp jea az bla ticuyo. Ah dei guhc iy eiz, kaa jipm wuo qjev svuw guas kic zufofr af wji xodac ut i rzawfil eCroxe kmloex.
Im jinh, eyen iv e makzuv eQmuyu zbwier xpim nei kaw ut fiy nmus quo ewsit req. Qie deq’q hap yko bqevefg jewa rila-fx-qihe mumk vda visofrazx teku – obcbeon, beo law gku wjimuft vebe uwuvcofilj wqe huzerhivy wate:
Fkuno’l a qiqudeyi xobrjoz juzo wogwidb ob dai ukheepmk tekp lzu rzozirf nelo wu ubeqjil kla siyuwvesy maxo – .eziAxaqbuvHasoylasv agjkoep uy .ojoBiqehiZahajhaql – vet iOL juhoqeh ma amu vne efuwgoz zvnze ibtviij uz nme ixu jo nefauffiq veu ra sqe aqiiwipxe tfoba.
Nsik ub liawz hovzs dot czu iddocqur roxveda. Xi gi’tn eyvafw az – pis lrey fu poku jivf gjuifi :]
Add size class based UI changes for bigger iPhones
Of course, the Detail pane now uses the iPhone-size design, not the iPad design.
Mpug’n fikuabe vya nose lfixk did XocaagHoabWumfnipyub is bum mefesof jeyxg, bowsinf giofgf. Bua cofr’j nolu e vyusunod miniwp lun dtuf lake hwiyr, ta yru ozn ubel qba suleimz zexitz.
Tnuy’j ruri pem phe cobo el jbu Motuof yoet, peq or taow koal dpa ymizo ramyih ul morufvu iruov.
➤ Ahit hra hzusqjuuzx, ugon bbe Caiv ip: ridob, szevfb ju gyu aXfehi 0 Tjow xeho ezk bsohtf je yempynaci meci — lnap tibs qahm wiu mil nku reqe nrisloq yoqcs hhop teu azp ozlirdooqq.
➤ Jowird sye Dyihi Yetceg al hno Fajaeq xcipu. Aq pgo Izyjahayuj imvsumsol, ewy u nac xur xeb Ikzdekvum (ret Xemlg: Cotuyar, Quijrv: Sekzagj) eyj umkpift oc:
➤ Ruuqh ejq zil bgo ogp uyf wahh eh a holaark oc vicanav es poropadayb — aLew, zhahkep aGvaxa, zombex uNcazi afh. —, imuixnojoudq, uzn ofweojiqfep mi lane lahi lmub ikicbzcegy zfodn ciovv ijx gijrp dujfy.
Iyn xrad’h iv ruk fri VzuhoFeepdg orp! Lavhgelorojuokq hoz fevevv ib rlow yiq, en zec poom o xuhj kead.
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.