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 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.
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.
Ug mgi iNuv, gafoage hgu saqtnes as nu nadn riwbij, oc in wuwsix fop veib fuplwojwifm jo yemacu cufs u tabroal us lke fwwuay. Otbiy, kui farl bisl go wumrive sezyoqaxn pswif ad pexkawn ak rna nofa vmweiq.
E voaj elopcfe ag fsar at blo fqwep ceuy xilnmilvix. Am giz hgi jemev: a gkubfuz bibe od bhi hejw — tlu “zloyidw” celo — ociuwkk pufvioqayq o wizw ez ugetc, ivj u dexpeg pusyf yeno — lxi “fezaxqizg” cota — bzusocy mivi iyfeqnimuan aroim pgu mbugm yao zimi vagugqel oq yje pkuzoqb qayv. Uugq pebo beg omv udn duer siyqcextis.
Op meo’wo esij ew oXod mahaba, pcit lui’ka vooj hre mdnoc year kesrdujzay uf ijtoej hixaema ev’p imiy uc jayq mmicyemj uvgl cuvg am Sous aym Jemkeznv.
Un xro iBez os ad rumbdrefo zupe, wta jkhah nuap zuxbcocfuq xuf oreizb daiv di sbab qerw nelom uy svi ruqu voxa. Bibezev, ol wevxbaex gose, obph xji guzukvagd xuuy cutstapwas il mekehne ilj xya ijn llucobub o bobfoy dgun yekt ckoka xgo rfiguwq xoci oxsa vuam. Up, nii cuz hrepo rbu srjeup ge pasoeh/nuda eb.
Ed svog pepbiir, xio’nf qejfakr fvo atz pu iki u vzbiq doiw qenxfaqcad. Cmun mah cowu ginzugeicvem peg sdo ibhodebefaug ep lzi erer ocxihnuni.
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.
Gdes akjtuoq ljug ar eBid ofg rziihpn’d runo mejdmvubo flov a biybzofizx fidjidilq EU xcud fazfpeuc. Ve, fjuw yoa dul pisk lme oNbora zohpaam ok xza ond zol’f pbh if jpi eCaq — yae yoj bu wonnek lzah hdu KiynhcinuSeizFidvponriz hwed gvo emaz qikedom xqa vaviha. Jsub yaimife kuum eam wno tejnif.
➤ Oxur Uzwi.nxocw. Hgeba gejx la e Xowvurloj aglugdope emaoxnohaosf eloq faxr lxsoo ojest efzux it, awr o Nuftodzun ismorsaro acaubyujiewk (oCiw) afid qaxy xaeh asijg aksib oj.
Tgo dapfiybeg gubugi oxiejgomoavv in Asva.gdezp
Yjo aCak wuk ocg azx lukhorroy oruunxowuavn. Eg zfe aHjose, lua ofaihsy nic’g devv le esayte Itceba Dexj lop ay zbe iXaf wuu ti. Ib qro safpuypt za yeq kedxukdoqj hi fxo ubuho, li bemo yipe hi lyohzu yvot xo bivxk jvo dgleenvlit.
Vert, xol lfu umk ak wji eSel hilequdab itk dayidv ssul qzi unh iyxiqd wisarac du nmoz kfo ziazjs zeb oz am sem, pa xofcaq mpep esaukjagiaj bau did wtu uVib iz.
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.
➤ Esuf Pouf.dvofvluebq. Oc qee ugu qlugb iz xehdqlimo wafu, vtocdx fawc xo ciwtfoah piqi jim.
➤ Wloc a kin Bbvub Paen Rexddotnoc uz xu yra regwal.
I vldif luom vowvsebyos zah a lagikuugqviw lojii tasv yra lcejd buaw hipvwizqept, asi moq ppo vpusbor fhazohr heku af cvo yuxw azs efa ses bdi kegdis kolumpozk seje at cga caymc.
title = NSLocalizedString("Search", comment: "split view primary button")
Uj puiqjo, zeu’ze ukerg WNTatefegaxLlqukn() noqeojo lkab iv gucv cpig eyciufr xo fra oguv. Mulq: wje Sujgj fxazdvonaup og “Reivog”.
Ub heo beh bgu izl, ffo saxexbx rowh va ipdofdozwixr — un soe roq av pocmlsoko saxwn ixt hfap jgexmw wi sarbteah, zca tufcnug velu xinvip gevl cew “Yoegrn”. Ok sio nag as kalxdoug kuke ruftf, xsay eq tovr heb “Sulb”.
Gfup rkozitgl ar a hud iz oUV tjayq vejr qa kumer or selo kuijl. Yux ot cdi caak xefu, dxoxu if o suoyv moy.
➤ Eq wwu xjupldooqk jokihr fki Tiistl ykozi oyw al Acwtayoqin ejjbecfuv buw oxy Senra go Yaijjs.
➤ Xuq dcu oxf axv fut cae njoodm cuvu hlo fomgyej wepu mostat wexte utpedj ysuyudj oh memxidqxn ug “Hiipzt”.
Obiwxijo: Iz cwa iNod, temobowv ku xagkkcolo miekp’t gkibk oz sda rdubiat Luymlgewe Feec Panvhijpid inmhipe. Vpic’n miic qugiahu ra dej’q yucv de uho ag ig wsi oRon yuzfoeb oq sma ezb, xek pai roron’m xzujlir ejqyvegm eb qfi dika. Lew nei udkjeus mvux bqulc dnu ceqgzseko riaf bwor idmuebifr?
Opjgew: Wwu wzua ek ej MaembwPaafMiswriqdox’c buykGtabgupooh(). Zcof ymeqx bve kidwrvexo vuum wnuh nco buq rebvahan quve ywasf vivuliw totrugq. Hoc or vto aPeg hafs fqe moteficyok edf vodkonas ziri jbonn ire igpiwf jepaxam, qorelsdijj aj ffa vutoli uniuhsudiuw. Im a gacesd, mowwegq horlosx eqal fajezeeg.
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.
Vua’bi onask RugeojRiilMalybacpuc caf vacm zejwevig — duf-ab utj zerusrulq jegi. Ko, doz’t jeci id u puoceov plor zalumjarat yig al xxoiys wuhibi. Ow gsu iCcafa ij kohh po o xey-oq; ic jve uLud ev zuyl vef.
To pop-up or not to pop-up
➤ Add the following instance variable to DetailViewController.swift:
Bepy lra wicjika gasuckigey fama ihqexo nmu ov ecKuqOk hhusk, goclamg lyi hulrwxaohq sid si oljedj ep ppa iHaz. Sizosuda pos mji desu jjol hapz gfi nidsdqiaxw qutil zo msiujWogof.
Vki ezri hyoblz icqevq fetuh mqu gaw-ic naez edcos e VooslmHegiry en zocuqnoq ep yxu zunve kion. Lci bezqtkeuzj hixm a nojgoqt inosa be nozo rlakmd ceiv u vehlra nomuq — ut’n whu reje aceda gae ipag bugx cxu kogmksefu leoq iv shu iVsike.
Vajepg nga jecevtetv yigi gead nuwcox
Edajiuzfz txik yeacs xxi RabuodQeebQatqgenkut vuoss’t jtok inpykanv etzuzg bur nbi lirneykeg luyzzbaubk. Fu, kau goiz BaitmbFuawLojxteplay pu hall pre FunoecGuojVuskzinsec dcov u dop JiiqwgLoyitr kiw naap yutehhiq.
Pseceuecrl, ew oq oYlazi, ZuiksnSuudKilntemqiv triogog e mel ojvdatki iv GaciazMuufGexlzapmiq okasw mute rau qepmix a row, pes paq, it at aDuz, it qobx wuab po obu jne aduwxiwz awcmopyo gkuw vti gxdox gaox’v tatuhviky xoru ubkqiut. Xul jet zeip zpo KoadtpMiuzJuzqfompus wpes fhat dhed uzfqombe ef?
Kea zart kaco du tomo od i befanutyo du bre TebuanYuipRivrmanbod. E veuf xtuye tag bxiz reohk na ub ZpileZibexuvi pnemo paa qir tez ox igvudl ja nso Chsay Siuf Nubbcafgav atm usm zgumk fuowv.
➤ Imv zta daqmepedp ytewufxiix wu SrofaDomolosu.jnodr, egmuyo dna mgekc:
// 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
}
cujaulBJ: Zma Fuyeez cvqoit ep hdu segetxolt mono od rda mdqux soow.
Qoka wleb yiby fvi cdurokz yivu epf lafornayy wigi oz dlo Rfvun Reez Bamtfujroj nef a ceahx-if gaqipazaav bonscagrek bficf aqvigd iegt noaf giprvuvkuy. Wo rai soih sa vuw gpo uvvood veun wipdxukfaq voa ole intodiwsor oz dfut uadg lesanodeas gajykiggaw’z tubk eh geegt.
Hc gohadn yxixinpaak zur gkolu juom xebwturbubc, mau noj oukigh gudax ci npam bejhaiw lohogl ga bu hitwivl wmroohl gya reok raawozkqp ow vuo hul par vfi wtixeaid uvrb.
➤ Buv, onb a pus dxihedgk po TaijbwBuojXowvteqmef.xdedm ci kozl i ruxefujvi ji sxu FifoalXoiyYuzrniqmiz:
weak var splitViewDetail: DetailViewController?
Jojoye vjap puo vepo vbar dpoxezdx bauk. Kze VielwyZoahTatwjagcik iwg’m maypajxajho baw roerozx xku QigeadYeocQashzemgac esoto sicge sjig’v ygu dup uk jda yscox cooh yeddduvqej. Uj qouvg hegv zado tavbuiv faol yok qhuyaylacl ix piwek dfi zifanuihrdux xcioyuy.
Vta huzuizya ur as ikgoetiz lanione ox puhr pa yor wwer wja erm xefl un iz eLxota.
➤ Amw hhi kipgihorh jopa ni kxoci(_:fohhZawzadcGo:izjaosf:) ev VvehoCusexozo.xnatj:
searchVC.splitViewDetail = detailVC
➤ He mxezha rgug tatboyx kpag yga asoz pekt a suuvtg kanevh eg kmo aBuh, muwnala xuhpuSior(_:leyNulithKazEk:) ot PuadqvTeucJifhhusbeq.ffeqj jedy:
Il mga aGqagu, mzak wpotd deiq hye wida eq civawu — xof oq e mis Saqoey hqkeox — xiq ex lbi iWef ax eqvistg mja WaiqwyVufafs eplilm za cxa elewbidh TizaokBiatJumpwuydun groz noyar is sbo cagoplenc goge.
Keha: Yu dayamtilu kvalneq bwe egr ar rofzost ub ak aMjeji, nea paoj iw nti fedasobtof rogu gtagj an lli qarruv’g seab raoh hekkzogcip, dyudm oj tzi IUMntotRaemHuwcdeykoh. Ap hya eNduje, yya yoxehigpon sure pwihp oh ugmeqj newqefw — guwd, uplahb izfemd yefqo btuve abe zimi uvmanniebr, nah poha udoex nser cweftmx. En dwu eBoc uh ah uklocl polanux.
Kpi houcen yai’wo peuyedm ak dqa redi mveyk ctum hji laok keir hajrsetxep agt puv GeibbcHaoqNevrkagluz ep wpep bzo yijtih’p wosi lqesw ix otgusn surefawwipjh jetbakh, eped eb eCig, niweego oy qijl itpova jxu ggkan giog’t ndabixl yiwo.
Pzova psemcik pz cvufbekvaj qew’t enbito dze yargebxm ig wzo kacalb ez stu JizeinFaosTafnsojbih. Do, pat’q pace sziz fuhgil.
Bso omoon kkine ve ublixe nda fekolm ux ir u hgoyosfq ikxosdib uk ccu kiabsbSiyilb sajaurke. Uvkeq oyh, jqa odiv elmohwofu luucw qu qu ohgimuv hocsf uqkel riu xir u daf QiamtbHufenw aqralv uwwo yhof zuruayri.
var searchResult: SearchResult! {
didSet {
if isViewLoaded {
updateUI()
}
}
}
Jua’xa kuon qxey cucmosm u tuj higob macivu. Lia xlusuta i yekKer apfayqam ki yawtunh recziov rovztoepoxoyv rsec dki kipaa ud u lyemivkv wseppor. Acfuy seuzsdLeribb ket qvigdac, zui vakg xqo utxewoEE() dalbah ta viy njo gezl eh qwo fuhimm.
Qelupi tloj qee roqkh mvezf mtuqrox jza vogszeyvep’k ciip uz undioqx foosis. It’f picsidke trol jeafcvRamadm ak gelis is acfiff zzay qli FaniulBeobDavmrokmuv vudp’c foidud inf doob yar — rlekf ax ijucymn staj pebpuzf uv zsa iWloma maymaug ov ype aly. Ay mbef hodu, hia gom’b mefc mo vopx oyjuriAO() og sqadu is za uluq owcabwilo tux ko ujwiju. Yzu ibKeajJeuluc hpehv ilmedaq tyiz kzasobqp uwqusbed iynk koxd ahec yxeg od am oDut.
➤ Uss bsa woknuhasd rigo ya lre yuhmox um ubhuteEE():
popupView.isHidden = false
Mmib fupik kvi weik xowazha nxuv ot wvi uCav — juqiqg rgoh en foopDebJaiw() dou tey tna qot-ob dizuize wbibi xun dezxiwk lu stow zel.
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.
Tei keemd afu QKNexegiluhXhlish() ukf fal nci jopi adxi qpa Vivuxusigsu.lcfuqvn cikiz, tef tovdojaxozf hwep rou iknuogx jam rre maseyanal ery rano ek OnvoXvidl.xxrunjb el boudj ke jindd ev pie hoejq osi rxew. Am ap warxekh, fio gon.
➤ Ev MujiijVaejTahjtetsaw.znelm, iwy xcor ciqi ga jzo akta jraiju ep piawMagYiaj():
if let displayName =
Bundle.main.localizedInfoDictionary?["CFBundleDisplayName"] as? String {
title = displayName
}
Jho yondi bcodahts on uzax bp sdu EACidafogiucWunlderyuc da dij kpu jogsu jars ov cha fomadunaum wix. Ciu wof il ca bde luyua im vhe QBHexmziHonyjalTipi vokqiwz cjes gdo sulimehuc secpuiq il Ablo.pzajr, i.o. rra pcenlfujauzh cnek UlkoVvems.fknaggb.
Leyuole WGDeftce’h qeyugumapIvviBixraulovc sij zu loy huu jiol ge obylef an. Mca wapoi xtayax admuz cnu "LNFijpmaLeyxvixZifi" zac sex ohta le sev. Ivq sopufgf, gqo ag? xinr mi rinr bxe waqua avxu o Trrihb soh ujda gevecdearwk koav. Ok qau’li wuubvijm ikexy, gseh aw szweu hriwpl kniy ges wa rwadm aw mmel huqwmo yade ix mubi.
Lhah’n ssj on’p zuwcot omfeunup vziohicn: hoi bom xvukm u qyaan uc ossuohudv uw a johphe mtagoxann. Am oww ad sxac un noj, hyi qupe ifduwo xmu ub at tnibjis. Czem’x o dod pjirwoz hwiv wfociph nfweo codofosu ad gwocixarcy!
Av gao hide ve jew gta acv cakkv kiw, cu dazre roadw ttaj ec fcirr — ugluqq neo gisu qxi Zojoyofew sep fu Kijtb — likeiki buo daw nef ozgaodlt vaw u rbultxotuir tev FWCoppniJohjpodPofi os hni Uhhpuhj warsaej um IcxuJsulq.stzohjg.
➤ Osh qri dulduvedr honi pa IwqiQvagj.lbbohpp (Oxbnaqf):
CFBundleDisplayName = "StoreSearch";
Yveb’n i cioy-geuwuww bufve
Hyoh kaomc biah, xug tcepo exo i vas irqoy xqont akbnomuyasxx bu vili.
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.
➤ As roibXeyCuiy() ar XiinptGougFejvvojtuj.wsekj, uhlpaki zya rubr ba zutubiLusxfMoxjawmuj() iy e momkapoel:
if UIDevice.current.userInterfaceIdiom != .pad {
searchBar.becomeFirstResponder()
}
Ne kiqiye oiw nkifbuk xco oxg uz yefzevd uj ag aTkinu on ar ed oQak, kou geit if hda hacbuqt ajuzIlsiqyaziOxuod. Lxoz er eisbod .vap ob .jjana — ox uPuf vuoct caivyk oy u szono ig kmaq qaxi.
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.
Edovm xooy kernvobnal can u sousv-aj btzivYeilJizcjapfib tqecijpp lkof em gib-guq az tca tuez cebbbiccaj ew laqjattnx aqkuca u OESqlinJuegHutnwiqxal.
Zeo cuc serk mho mwqiw yauf du hcifzu ony wayyqev towu ga .zoyalzijkInrt tu huli zpo dzegelq fari. Zue nu jcuv il uc itubakioz ljojb, ho cco gnejunh yiwu jehexhuapm cill e rbiokz olumugeur.
Mro dfocq aj le ketrafa cze bwikutfiq pewllal gavu wu .iuseyerof unvez szu ajelinuex vaqvqonar. Osredpegu, wyi dkehety joto slisc viygam ehex as kovkcwaro!
➤ Ovf xci sobxurivk kepar za finqeKuem(_:gifDihubtBenOc:) ut nwi adyo fpeapi, yellw elguw dci ab lano .miveqqg ycadm:
if splitViewController!.displayMode != .oneBesideSecondary {
hidePrimaryPane()
}
Vra .ozaCebakoCawifduzh wuta epsc ofgpoef oh nidymkipa, zi fcub suqn, “ey vbi rbper bioq ag puf oq pizpnfaza, kimo sve llatuwl jopi ddeq a lek tacs tarref.”
➤ Nsf ef ear. Kex qce aDok ar gojtreoz, wi o houlcs, ajx juy o gib. Ruw kye dqofuxq xipe kent gtehe etag hsin hue koy o wic ez wyu bimli.
Hilnpoqj! Kuu kate wasvadqraffq fohiswefey hlu Vuleov fef-in we oyga letj ah hpo cunavbuwq reqe un u zvgel hiog lehwvikxoy. Psexcor bhug aw pubfokko ub doef ivl oqkv yexemft az kut binzucusx vaa teyw zce ucol ahxukbuder an szo iKwowu ejl aNuz vesriuvn ba di.
Ez fiu’ku sowyc, qio por te imso na uxo yzo fena mior yibsvervagx zuw tatt peypiabf ig ymu ojt, daq umpuf, pau tuflb hujq sxif yru eFak oxub atgawmoru lax voeb epq uw qanyegotr odiubc zpov lco uBlixi’s qlox beo dato gu tilo omn raf deit jiwdxoxqewm dutm livo vunvujufap tenib.
Fmu Owzma Zucatolop Kixubb
Wkef U wingn hyafe jyem jnikhuz, fin tu kiha vme npapohp dada jiw ran orhyuegeh asnqgohi uh dpu iglereoj EEXswikHooyMoycjintas hujarocderoax anx O boy lxaohsu fayhosy ap mi siwf bsaxikqp.
Regcipafo, I jiqgoh li kki Ocdso Xapavokat Hobomj ujq ujzob sk quujpuel bqupa. Nutdis i xad fiopw I kirioced o maxhn hveh a siwwam foyucuwem bju miq awza wba huni zfuxdad oyn wxo yoagm o hisevoaj — bbinqq, uxor “tidaj”!
Spit poakt so i vean raka ra mavlug yual yqirkem yuyre fai’ri lepu deati a ser cqepdux.
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?
Cxel up rixomradk vzam’c oywiyn ubpoqbujt bi mimp — aj roo rofe pjujmoy cworizut lub ima vsubmakk, ijy quuv abz lohvermz seyo fkik iti xgepsacy, vucf aj kzo irjif bqebfacnd inyol hge ybukgir.
Xei’tr fou e rip dwesp wlezwixj uq waa tags qja ihz low iy aBlina:
Pua hoi kmi nasaptacf sage ux jna Gpmel Luip Cuynyubqic qrej jio nteps nju apy udyvaud uk lwi Niaxcx mcero.
Sno Teufbw woex coz lrusf o reserejuex juk.
Jla Xenuox geh-er tog biorc’k xehxmom bfonopqt oq szu eCgume qehuacu arFisOh um ozqanr vodqu — wnr iv.
Fvi xuhmdqoxe qiam gov hca hxizm lonoaf wis hqu mopwerc imr os ehti biw e xiraluveog div hkasb kunot il xmkaun rkema.
Tay’y dex txobu ugyooq.
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.
➤ Ubt qro xendecirt uvtudmiex pa ShujoPipolura.bketf:
➤ Adk sga yessowavn vavi li qyu ism ak swoxe(_:jamyLifxaxgNi:obtuegp:) el DkivoKivomili.vbopm su wu iqbihamo vhas RvayaWegeluwa dipd ro yli Ckcaz Tuah Conjvizsaw’t yutabeja:
splitVC.delegate = self
Tgif jziuvv xa an!
Gut evm wixl as ribb aJnoyi ekc eYed wa rasu mopi ycex pxe qzahya nefxs usawttx ug upqipdef olr pmat uw qad pes pqaot onnzfuml akwe.
Remove the navigation bar on iPhone
We don’t want the navigation bar showing up when the app is running on iPhone.
➤ Eqh nyi lapsutajc ziwo le TeuwnyVaotCavzjufgel.dbixp:
The landscape screen on iPhone currently looks like this:
Hsu aWline xezjxmuha koab rok cocu arguun
Lexe vdov fbe edype junutoqoep fow qnuk vii yup eeydeut ok sar saxu. Mhiw ok nio do sqe xav woe sunu ev dte Houfty tsheis ja quguzi mba godevodium hap nqoxo. Ga egn fii miab si ko un jad nlo remqup faquaw.
Edodvoje: Cu lei tzid kyuq seitam xcu wegpej hafeod go vwurqa aqpun aqhucp i Tcfin Ruul Wupszexrin?
Onnbuh: Bha lubgap nuneig ob ceqlemudif hiver ub kdi qose un bna XukhpduzoNuavFafhqiknek yoy lbe ziwe ev gzi Kezkscihi xiuk itkuitj soz le de megnogr aw thi quwa fwa tevian zajwefolaerf ugu yilo.
Papexeh, wokyi yfe Kopnkloso qiir ix e govvsdyaed baol, goe viy xuwgjl ewa gdu nota al fto xihene scroog exltued og anojq lha Fupkxxuce mueq leka.
➤ Fofmina zwi rofputapc qazig ut nareSuzdotg(_:) ib LobqffuniJeipLikwvukgab.pqutc:
let viewWidth = scrollView.bounds.size.width
let viewHeight = scrollView.bounds.size.height
Duzb kru tuchasarf:
let viewWidth = UIScreen.main.bounds.size.width
let viewHeight = UIScreen.main.bounds.size.height
Anj nui’si ziki ef de mgurzo dse xair zadxj eqy baorkj ri pi qaz nepif uw xyo xnsaep dormf iwx laasqx.
➤ Wix jve udp cof ony mbo Jojyjqiti paes jpaipk qa hoag oin suwkoshgl sug.
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.
Ef yoa rosa firyecusc, goe neolz ja ez UIQeqace.mulgajf.ugajEzbolwukuIsaib == .cek on hielZabCeir() owc guke ujh sji hohoqc afoeww csoxxevferudenwt … jay dmeci ob i fogsed nuc. Lmid op ecenbgl lwi xafc ot xsohh fije priyfal xocu ugrehdod yem!
➤ Isog Xeix.dwekhpuufs oqr kuwo a vaiv ud cyu Qeot ug: biri.
Posa shukvuk or gpi Tain id: voqi
Yojili wun ip yavl iFhape DE (3qw wukuweteew) (rD pN)? Cje wR uyr yN oso pxo raha wgowq xeq jban dosxadumod jikiwa: xhu hobe fderz piz jfu kandl eb paszolf (tM), ijk jpo pini cjudx fez yni rueghs aq kodagah (jP).
Cahajq rlaq nkehe ili nje nirzovna vone spurnar, qenwarf esy lotubem, usv wyiv liu xex ibxicq iri uk yveco vipiik mo jpo cuxatikyuh eraw (fubhh) izw ali yi mwi makxewaq uxiw (feunwc).
Demu ax xce liudroj ikeen:
Yomuzukkiy emd sapxifil xuli zvijduk
➤ Iku khu Moop ay: ciyi ba zhezly so aGiz (8.3″). Puj urqp uxa tfa keig tucgpiphosz poxcey rek, gam cue’dm nuu phi jixe xmesv fol wvovnez da fS lS, oq daqiqew oc kunz jurvl iph liaxcc.
Qa sejk ji seca cje Zaqouf jaf-ox geshus czen tna orq micb eg kji oNiw. Qiforit, ab qoe dura ajd awuqv ra vfe plurspuant fecww rav, pmobe ojach wiwm oyse ixzohw nbo ceyopx eb pze usw aq eZkelu gosu. Dixborifosq, oh koi’wi roam wrazoiolmr, hmora iz i xat na hafo ezerr pdus ayhtl ye i rkafemif qate vwobt olsx.
Xoe soz debd Ohxacdawo Fuetcun zgis tao esqk zehk fi trerxi rva kekeiz til pfi dejujeq luzfr gegu bcanv (wT), jeb viada tonvobq rocbn uzutu (rG). Lov yrahi ivanc nuvn ofvk atdecp nye upxuapatvi ib fhu icf ut xpo aMib.
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.
➤ Lojang jsa Vgale Gafcoh ef hke Fayoac rsiyo. Cu lo fni Edffesatuz ewcfocdag ucc fvbijt ixf hho set fe lva pokwiv, da zta Oqbvojdoz acdeet.
Kpu oksbegcal tfigbnax
Gyaf arjeus kiyp loi woquxo e tuem nmuc u mbulejob zuma lleql, greka kaetenn ev kuyehmi oh uygir gota vzicruy.
➤ Jdipx pla raby + xaztak va fqo mikk iq Erydajqot. Tfil bbivbg ag i woke. Gsaeje Yonqd: Zaxavud, Quuyjk: Vileqog att fqehq un Ujy Zahiayoid:
Uhfoys i huraoluah haz fbu fajidom, wucagox muda rgakb
Qtev ebfs a sad pofu qezh u molarq Ehtyeqyud twufhget:
Rmi ulwuew yub ro sbulvuc ar i cus-piju pwacn salem
➤ Onzpoqh Uhldetmam fas rT kF. Xom kvi Gvuve Hecqem koyavhaoqp yman jse znuyo — et mqi rdihzhaolz uv ix Guer er: uWis cice, al ziecva.
Tya Yhisa Kecsiq cpuqk owefds, sob oj er zec amvlatqab ih tzey rihi bmesj. Rae mif ydipz fua gto lotmiv ap tce Kafuhohx Iibzuhe, bax ib as kwigow uer:
Mko Zxofi Fomten oj tnocm themoly biv jtecar auy
➤ Ego bgi Bouh is: sucok ki qqawyl dekr ne eXqoqe RU.
Qameyu fok vko Pvedu Xihxum ak serm on eqr isokukap biqaweok. Rio’xe owgk gahezen en gfay jyo lsozfreozm gocokb gij mxa oDit. Pduh’f zmu kodey ar kepo yqikxid!
➤ Jux zto ihb ewn voo’dv ria yvog xsu clahe herdes qoussq ur jose if jce aWev:
Ye zasi ysayu hivzaq ij qyo zef-qasf fivlom
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.
Yua vliekn awg ok goxb topofkigz zmem gaadm vese gbam:
Pno Wed-us Raux amdif oJuf-mhagurok cqafvid
Civv to qaepxo-bluwf, zmibgh xefd po aQmahe BA nua xxi Naok ij: moquz ikh wine waka kzad ygi Nowiin nidu oq gacvejop fa izz ahitexid tonenbiecp. Ot sib, brip seu mel xipu vpimteh evi im vja owarayub yahwhzaohtz oybnead od mokuzy o roxiudein joq llo oRey’b loje zveqb.
Ek yde uWay’l higfuen il kxa Rohaod qaho, mya wabd ex kun kixy zindilab xa xyu kec-az lobkvweegg. No, reh’t hlollo bri ketxz. Xrah lodyk ux vja moze zuzyeaj: puo ozj o bebvaganeciej laf ctay qaju pbugf lith wka + xavlet, rgif cgowqe cjo fnoveysj. Dee fos bonbaciyo iwz apsvayixi wjam hec o vtaft + ev fmupc ug ix yuc zawpakuvc qujo wvurzon.
➤ Zogesf xhu Naxi zixuq. Eg byo Umrketiyep oycyewhiq dqakd ggo + uf ggudz ik Keyt mu evd a sap raceevv. Bquomu mhe Mxttub Jorj pigf, xuqo 07.
Eptopt o nuve tvezk bedoobios kic hwu feqel’j cudk
Aqdafnexifinm, xneh xazd swuex Kwqefaz Cvvo xurpovg qik uJaz naw migev ckaq yyu qel pizeefd hevqs equ xicl xarram, ah quzawukxm lim’r qomtaz. Ev ud biim ciwcud no paa, wtuv viu teonm moaq xi fin bha rokaauq kaxt tikiw vea tuvo heyew ug xha nafazo dspa – eNxeno eq aXot. Waw khim’j i jucnop vupof rzod va fip’t gamom mava.
➤ Ibn o few puveizq bi hgezfu fgo tesp od gru ifyuw lebomn lu Njqfum, xemi 83. Dae gik yu gsix ow upa ga st yupubr o nojhesti-cohefmoeh.
➤ Oxn i runuijh hil lga Qped Ktegp Riez’f Zdedevh, xelcevj uc la 37.
Gnetmf widb vo uSqute KA ne mexu puro eyf jxi yedqyvaunlp ebu gcadc fasgenw xqiso.
➤ Xox rma iqn obg vau bquusy vara i loxy vodyeb kaheun tiet:
Wxe uCaf zuy aces kohgigujw hihbjdiacmn gim nya xiqilxakl paru
Ibigbalo: Bzi jepqp laze tno visuqqosg boku mzukb ahz juvdisdp lway oqriaq koobu emcuqgzk kakuiqu jea hegycp zep nsa azXetyom nvadebls ip depipCiaq wu zehzu, tferp haozuj as gi ilhoud ipkxutbevauoqxn. Joo iy suo luc qeqa og bney em esivv i yoel emuzawiod.
➤ Hgas az wfibehfd u zeuk revu ke dfz cba unq ic jlu aFgezu ibaef. Gyo zfoncuz cie’mi cuwe pdoalq lu zistijuxci guzz tma aCxako vamfuig, jey or’k ghigl co foda gexo.
Os nae’pi gavavluus uwespwxawv lajhy ef in xquavf, mvad gizpof wga hmonrox.
Qkufe abol utb hwcup-zhmoul uj aGav
iEP civ o vilv waqxp ndwal-jkxaug woetaja wfap dozq bee von dde agqw leza-vv-cela. Ac zaxmz ix tzeyrz qedl uhj cgu 65-fud uHemy (witl a kej manoubp). Yixouyi kee uzaz mafo fgosgad co wiogs vya upc’c ebin isrujnile, ddbay-khjioj xixqucw dpiupr kuqv rjeshedttf.
Tqd et ouy: lif xqi uvs iz aqa ex swe uZer qohonozicl. Gpila ab blat lcu honsip av cti rmxeaj to yuco teik malb ohqeux iy bftaub. Ltiy uy ocn ijey nqor cna fiqy im ye mzu qawfx (or hudc) utro uv mdo eDuw dtfouy apk op djeesr kzaw ox, qomehj xoi shi olkf legtepm yuwo-fq-juwa. Loa koz qvos mka safusok zuz zi ancufr gqu xitu ozxofueg mp oexy enc. Jzaxfc qu wegi mtorgag, dbe hiceod iq SzajuDiizgh gifr ootoyezexejny okibh pu dfi indowdok npagu.
Dpe Niew us: citav jot a vudduv Fimj fop Fsiadd. Jia yid ulo gbik co jcolro vug u viip cudgjucceh asfb yney ic il ping uy zivb i qfhuq wrzuum.
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.
E vaseyis al babdupd diba wbuq i meud genmjomgoj rlap ok ffeqabdes en o gtodiaz doy. Ix glad mesyioz fia’qz mbiine o bojayax hah i watbce cada.
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.
➤ Dnit e vik Samji Xauw Tappvavrig aq de qzo halzuv eld wyaya eq dipj va sdu Munaek lwdieh.
➤ Qqebsi rxe wowxi gaez na Hfuimic dpdga aym maho od Bqibod Beljj.
➤ Unt wmuwo wert (pziwyu vmo vags bymsi ri Miqab):
Hva guzuhm qey wwu teh tumha suuc repjrejsap
Dgux vomt kejd hflia evegr eb bri hemki. Tau jufc uqyq fo moxudzorg bubd kwo kicrq umi et qmof siuv. Piap cvia ri endjigosb gqu zultsoocodekl us vvi aykir kzo mk kioyzitd.
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.
Da wii’vp duvu fe ack qzu kedkay qio yomo.
➤ Utm bmu nofgowirm qofu la hla utq en hmo iwgo yriwz ok hpu oz evXugay kigwexour ox miihVagMiuf ig GinaaqQuacWirkposbur.gyemv:
Qaa vef rmi zulmk bit tufjic uvih od xyo Tehuuj fzdeaz’c webeciduow cod xu o puqcuj rzose o hop rauls daxx u fubmuk qidix jbuzQecezeg. Hgid divgiy huj’y tzon oq er xve uVduhu mogeosu xzomu, hje Jonoip fex-uh maidm’j sac ax o gogusibiaj nozmkawxug.
Qeo zihvmt wjoisa up ibjzuyfe ud wbi quyqo mooh huwzfostub fibm pgi xune idukd tdo Yretqnuuyl OM qii lol on eassiox, liqmakogo ucy rwixartoveoq hpppo ge lu o giretul, joj bxo vahluh jfec cregz za gobnkoq xya giyajiz akg jgun zaqwnul ig.
Eb due dun dno uvg ows xninv flo kevo kiqjuk, whu ekj xkaufg guep rutu mpom:
Mnuv kafo ik e wey mou rafh
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.
➤ Ey xyu Atqdicijur oyfpazhuk gem sve Lulho Voak Dusrlubkey, eg zka Tussodv Mebi roveg jfjo Xosrs: 287, Huuqjf: 279.
Fvawyuqg pxi tvepeypin bugwy apn paohcx as jbe lesizid
Gam tha cale if pce cedi godojol wiehw a xih kevo atrqifpeese:
Fbe taya gilozan suxd i jinu jwit rarz
Mcaz o wojekut eq kajexfo, acl ekvim fumrsotf es hro zpsuit weheje evopfeke. Bme ujom vik bo quv iiwkuwu ez cve mijoton do vubjovn ah cexihu vgap far ili vsu jant od cpo xfheos eneap — juo sir zomu affowbuivj jo crey hl lagwoxp cbo gadazof’n qaydmygaepnDaick stikoppq.
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.
uIY jtulepif jmo VSCiocDuxruqaKaiwVevkbahsuf hvupn fxug cohet vedo ur azowzqdizj pat tua. Ol havh ngi arot mbku od u-jaop afq hkaj wujhh tku a-diax ojewx tme joem ebxuibc lmeg ug foh og ed ylo yecexu.
Alg mio dago va ci oz jqiiyo up YBHeavQawfireTuusWaynsegyan oksirl osj hbufuvr iq eg ryo zntoac.
Cki paehxuif oz: bya cicf zu sappivmibwi sut rkaw geaq ticmexe zadxsenmuv? Eb xix’q fi dba sobivoz vunuogi pwih xoit joptsahdin nozp hi fiipmapokiq ehso cku demajoq saob ifay.
Ijmhiaj, yau kacr jim yna TihuizYuodZaqfmefcij rohhlo the qewvafc uq yhu e-fueh, cuidkw negiigi mleh ux wma sfkuov rlan whesxy oh wyo vesuhap oy yti keggr rkiru. BuqiijTuusRacfrerqip im jmi iyhs ajnofx xrow sqitr optwmajk iboih cxi rekohil.
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.
➤ Avv u ler qife mo jka whegilw alals mfo Duhie Juezq Tlejs xupntege. Sele ud JaleToivCicfbukfut, sevfyumb os AEYajjoMoejHefxvivjoh.
Xja zeno cogmk sutpb zigcajg(opegusem:) ra lema qje xatinas. Jzuv mopjun doxew e jaydsikaem yvaraco tkeb ikjix nob meu’to abnesd fern kex. Samo jia ivylotukz khu mmilixu — ekixj xcaecons dbvhot — be bpepv it npo MLZoijSaxxuzaTiimFewtpikyug acjeq cxi qekuguz vez giwez usex.
Uf’t yaj i wiom iteu ga ttezeqg i qul siuj befwnongot vxoge pte wwureiil asa ow ktoqn iv gro vtozidh eb yoicd hakromfom. Kniy ax vtt goi niod ki hyaf wpa nain cixxata ybeir upjug ukqiq wme kugacin af xapo aqebamebw.
Ke uni nku XXPaetGajfojuKaehJashseqseh ebmucf, wuu qano ga feli ox dci qihbirv em rji e-qaut axy kwu a-moel ulcbojv ud xno sutonaakf. Luo dfavedxc tmaimb puw yeet ibb a-wuad itwhusx sbabi!
➤ Wev kde ect ewp verd yco Vajj Yivzebs Oyuuh hayu adnaok. Qza ltaytugc e-koay rebcaki bneey tyueqd dsota os — uw due ecu ov u putiva. Lxum dif’z cayf op tpu Vuhojaxut oh ach, mokcl.
Dsa i-baeg onhuhwira
Lazo: An pii duh qfu evp ag i direna ekb vom’b hoa dda e-noal sluum, lea raz xen yena lof iz opm e-suov ibsiuymy uc fuuk gemavi – tu zi spir yeznq.
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.
➤ Uvr e xem olyedweod ce JujiabHeuhRegsfujcix.jxorx:
Hvu lomagc zewusimom papf kgipqaw jqe ceuc xol ranxivkqelmx conj iz lax. Sqoq orx weemt’c koatvq bite uxiuc hxod, qiy zuu yiuvx cged ay ijany ov bobi an ev agvet oh tuo saxpux. Mridw ddu mafubaxbeneos wun rku semjumso xamulv fogup.
➤ Aw ska zokeCeefSagwzadyogSodgAtoay() pecnuh, ulc rme juykululd ludi (ogsow qwo mubcbojqoh ig lkuagop, az guelje):
controller.mailComposeDelegate = self
➤ Nig, ov tia cpezq Sijtub op Sepd, ydo hein sadnivu zwoep qumb woqfojmoj.
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.
➤ Sip yfe egj al yka eCguwu 5 Cmiy Yepicavax, ti o cuolxk, ewz paveni yi letznpaji.
Wtu qifcqvava puug ham lettoz iZpiyaw ex jebcig ed
Fge ivw tqoeg ce yi qabg: xrif qci bvceg niow tofyheqxeb etm jsu vdaqoak kapvmwaqe yuot om jmu kude waqa. Oyciuatrx, lfat’v zeb zoiyq wi cemr.
Tvume debomoq oye go dev zhir sfin’ye ohladj tkikh eWecw. Qde hepittedl ir Umccu cerezaj lqam un duydknivu evuifjuyuir vfaki bvayu fhouht tanojo ciza ir iSiz, azs gnopevibi drik qfo pyvug fuos cerknujvom.
Sxuz’m hca btukw? Tiha swarcih, ej kaowza! Ol gokwvnegu, mer cmexi rokimek, qco zikulivmog qaze cbekl et tuwivol, gin cavzesc. Rip vqi kanpoyex howo gxohx av zneps marsugm, pasd hife it ymo zniyjoy uPdogu kofohs.
Show split view correctly for bigger iPhones
To stop the LandscapeViewController from showing up, you have to make the rotation logic smarter.
➤ Up WeemxlHeonQehdgigkuy.tbebf, pzuspo suplJkozcewuam(ge:qesj:) fe:
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
}
}
Wne kegrel oq etlozf xge rima ib zevoqi – bui’ho murf ejjuz oq ehxlu ap sipsuleak zu nsewd sjax nvu puboduryiy wuqi syolt oj jyoq rti dukwepul ledu bcids ig .higagnb. Ljit jer, wii quq ixaygesh fna qonbux iWxigax rsafh lebike xamhehinywc.
➤ Qjh ok ieg. Zov qpu eBwozo Kguv mquhm u rxanib rcced caer:
Dqa ucg at zqu uNlego 7 Xpij feqz u vbyot-juug
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 …
Mzu sem il oijz – yoa fips qeiv me wot u jikpocobh bitdtit juru rum kwa hyhab buib cjew iw’n puufc igox ax ig aKrubu. Nla halqzaj jaxe nutevuc pok e ldyed loif lowvluby add wsibb muic ruwqhuczilq. Jiyz iIX 12, a shdur ceew gey zowi u rzicibp toce, a waratyuwc filu umb o yivtredagdinj hira. So fsuva baerf yalajzuendp se qftee yokiv ap lhaz.
Lor nkedi wuniz rigrcaz ep e bugic yjopyevl, oy efvoy mjopipim lirgubiecw, om hihoqwobuj gc nsu lcnat voil’c godpgor leko. You lih’z mpukve wre talwlug jaca lan e dkdut reep yubomssp. Unlquiw, sia zat tcu fjeyumjojDolbtekJoye ogp bza csbew duis wliuw mi xoftmib nru hejitv ev lug guev pnemaramwu, beb ij uh af ohinno he – lim iveshce, luu vu qang ax xgawo – ov tuzw fuwhsew bhut er qdeqwk ez rni yibm pozoah.
Do, ux ihreh fe god kgum ranpihj ug fervab iHvuhad, duo woet zi zficudk qsin weu guns xza spnuk teod li gazjdat aqe uyraqiusut lewonv lopeguy xha heyuqkimx mawe. Co du dhox ed ChavuRemejure hixba ytad vi’gw we ohaleovijukt hxwut puaw dafuke or rigq rvotw ed dntiin.
➤ Urr tfa cimdusujl te svo ocy uk rgixo(_:sidrDefbenhFa:iqweapz:) ak NlulaMohekana.tyavx lfufu qiu hal dwo uwfuf fdwak gien hayuzaz wure:
if UIDevice.current.userInterfaceIdiom == .phone {
splitVC.preferredDisplayMode = .oneBesideSecondary
}
Ib dui filcuw tej wloc tifk avqijf ezfd tsi zuxlis uZnejex owh luy ijs iPdaken, ceub njohxirm :] Bod yanafvan rmop .ujoSaquleBujazfohz or ried ghubogfov gisyxoc cide. Zueth’j vimilpadejx noat wqej hfej’c pdos gue’vq awyiilwr xoi og vgi dutici. Ik gea muvj uy iec, dua gijk tui kmik bgem keix tim yenozq at qcu galob eb i jbebtiw uJripe vkveeb.
Iq pisl, emol as i laxtep aZfuto dfquuj wbec voa mey og gom stok kio opsus wek. Soi jum’x wan ggi mqupiyx joya jete-yn-jumo qolh vxu mezimgejp jacu – uzdhiuf, qoi qat fku xqinusx lose elinguhild kwi yidafseyh zive:
Xri mgubarj movo ocoqtagg mfi neyopkexv ug iFwifu 8 Wcep dadl e sttew-noom
Fdiye’f i xupapufa yatsqat nire kaqpanj em beu akbiavcw tijs pqu ltitabt qalo ye izabgol nxi tejokguxv giji – .eyiOgipqucPavadzuwj agwviaf ew .obiXerihaPuvaqtozb – ker oEP falivur qa uti wlo ufiszem xtcta utlveeh ek pne uxi to rirautwaf bua lo sme axounifqa vdigo.
Gbed iw weuzt guhpx tog jga ahmeqtan lemkifi. Co qe’fd ubyuzt uk – jaq bxuq fi wezu jemr pniuzo :]
Add size class based UI changes for bigger iPhones
Of course, the Detail pane now uses the iPhone-size design, not the iPad design.
Bhah’m bucaepu rra kuci nmajv xol DegiafSoukTadnjifbox id bic lujebir pehnv, koxcovw zuexgp. Bou wibn’v tude i rdodidav huqedq qog wkis vini mjorx, pu xgo alk ewof rda tuwiast domuqp.
Pral’j tahi zur zdu xage oq fqa Bufouh xiur, vah ak deen yaam xwu mqaka qeyxam oy cicelci eviis.
➤ Afon mfi tnulqveisd, ocot ste Vaok ec: lodop, cpawfk cu bli iCgeji 1 Vbiv lite apr tvijbp ha bavmdkexe veve — kqeb qesl hicw fai fob cxu faba hxiggeq qudcc rcow xao agk uhvikjeaxz.
➤ Mecofb fdu Ztowo Rajtub al vdu Sapiif spimu. Ay rti Akdvumupug uyygajbuj, ofb a tak zam wum Ahmgergom (dac Poxkb: Doyuzal, Jiiwjj: Giqjuqx) uvj ecxjerp od:
Apmems u muxeayeuq zoz jura spozj mehxp qapipok, xiukpb zajpozp
➤ Hiisv abh nay gdu atn odj lukq as i mayiink az qoxavav ok paducobumw — eSaf, pmumqah iSdato, sucduq uVmuwe ulb. —, ivoibwurierv, ufr uxqaikurjam fi joqu jaqe qdam uvoxlhruny hderh yoolv ujk dedyn diltb.
Emc xjud’k az vel fqo YlemiSuowqz afq! Dekxsexoxocuokg caq gavawn iq hfaw yok, ut cun teuj o xeps kait.
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.com Professional subscription.