K)1*o2M7erOqI{B8uSt~a)#@ozgfi!&1sl0Uq0B{S@yL8*-+DWNDZ^?tHEcqQ z&=NEUW=zLVDRvW5u0Sh`rM|6cvn?>@Yimqa$gl#fLUV@a8y~-OGRGRU5k+rCYtcHi z9&G>?d7jg7S}uu82F6I)j2fZiH^K7)+RW*oyVK#x3Mc@wQYda3@C=R zqUfA&pGK1myjE6jS4O6}tk!C7%^?)&V1cZ@WKOHMwZ^q_js!|`at_JhY}+g7Rpir% zc5wPe^ct5+mJO10ps5N5RfdCHXVTs14HVso_Hb#9XfJ2rROSlTNmDB%b50EW)0yS~ zdK*PIqqopObO;^hI&)pPu3R_r!toC;gnw24HkrpfE(fLoGqNE&vQ@QtSp*_yYlP5| ztI(My(qYbu&!P`n+i{M|;JP~_E}{=n^u~>j&UliWv}seOIMaQMK5Z@FGcNma0bio8 zTATefm&2)?Ij*8>B;p{~r4e1{avw+BL_d&-TU?Ju^cFN2_&`b~#>Wevvf5e5&*&GD z_AZy#i0*N{NZPP^o7vjmYA!Qdt>)4!Sfk2eTF#kZH`fpuJ} |xdEGCEsVs$u>J*bMO^n0P-I>y&|oREn61Ofug5E_6n+v2` Gu2nw z9W@BWdpm1u q@Tty=`aTd~; zD53TindV;==0wws%Si!c+?YmO!Bujq0ewxD8fR=3t|R?ijcaf%SH)FxHJk8QK-0$6 z0)p#EKgYGJj?AHEBZyBm<&I$MiU1M}jHdQ!TZE1$-}f-rR-5hC24Pq<;7N^mB3H*v zcM>%PKLc_#o{Fbo4)b_Ao`Gj_V>v5l mj z#r5D;b89%&aG2vA!Yf& o9~dPgPd#7-^6ur z#yy^XT8HQ`XIxQX9}o=c>PJ^uN?JB1AV@1p6t>!WYl(BI!K?6k r(% <3`$Aw=l4*-h1T+;VOOhl-_TWiadvDwV1T7HONxT2VPh1skDCP@<`N4uSm< z> ?vn2H{o9h3V# =AVMJ0c+X{vMKDkoLk)1^{-`E zQ^8aysip(fk?KT+aGSVh?geghGYDV?DjZ}2B{18IEt0`Nlhs0|We{x4;~io`p=rDz zYr~}1KDK3HF_zSlJ)68;q$7K+6&7P#iPcg^w*R0JXqUuMI$0Y8)Z!fziIZjprGf>M zQgT}xkpbu<5*ZJ7O{S($Q;~?8hJT`X3fR}jT3c%uIE~0d`2afT z3ChhimU^2ojvQk71iKIuSZB3V!(R2NDDDUhn*H4IOVmv28K__u^(-|TDw#&jLrbao zsPACV^;eZz%{2q-Oz>$RRw9V|f<8d*obmqE{4lK6YH vGmk!_~fPny5Wwmi%v%3pMPe z_JPFmU)0b6=H_VZ>& zk9HmlVTxv0m*kZH@;FH9 !aHL{?UhV@skmZxdtq-wc7RVP=& zza}|ZEl<_! jmYf{xY>ZG)6K|SVN zdC15Sw9FSIQg0tW*}vAFH~MmJjsBpxmR<-9@(%9M5kzQEN0q>ktPxnCs3 2Zg&{pQBZ)GqM$#>Kq-wr2(aOW@fG;H#IXQDLW%6Ek&C(3_2_sIxG!z zS?A?p;SqnQ4g+;o+xnZrBU`m%7oualW8>mMjLSC)_y{z%(~*a^k84|&Ln$aIp8qu? z0hW)IB?7(Bv%p~TFr^BJYg=)XG7?^EwC!|fO`6D&>IwR?veeO<5{+7ytOmtWzOlEt z!CWd#GiK|TQi)EVnr7(SrE9nD=^2@DT9MnMXI`(oK7I51^)Dzij&N4wpcy)FfW=+~ zQ=~UAm_UJ`%r{%%NCZZ1CWu}(NS0@VdIo~vke8PYxaHZ%b`V72d}FS~YJ(lAt*#bC zU@M3nS>*Uc*at~lOBDdMLA24{P-X6GvQ;{?hC-dK+?kgxRNKQ^=corL$Sa-DicWrg z^=Pw|!yL`IxVdwbJIq83=PH%J(TF!3)6m&)*6Iz1DiLtLszrJ@Q7uGcVYF-qCE9h2 zuq)_Mf^is*z)?5`$H7^r7Wc)Y;Y70xSHLOeI=m5Y!@KZN*c-eL=aWBEesBUA2ogy$ z)rTseMo}eH1)MTYfaPEfwVyggeL#In{Y3pr{Yksh!E`j82B(6<=rTC{n@V%^bb2QJ z3_XjUP0xYzzXkLndI`M@&Hz_A7Boa*;Tu$O?f&Ss+$mwQdz(4}UDl$9B?l{;sJE%3 zXbyA*`Q;QSj#KZ0@`E}-odlBJp-xlpQfH|5sI%N@?p^K-_a1kad!PG&JI9>| a&-m#E9sN3if-;PE0JFXiz@9v|lM+dMwX<6}gK@yi4qO=VrJrN(Y^9OuAB z9_Ezb7Nvx+a60yhw%l4P$d$I?!l{q3q{2+p+kV1NP
PL%6a zW+?EnIzq^n2@-6nBcsLM0FpHbX29&uiAZ1?kk5jJ5K&0iltXPbf-WVmrmPl{JC(Do z$pZy7dwY4BknDu 7Q+}>%Uv#(HaquO8FjFH342>x%a+tsSEq6aM$pT!`5I@g0ukA&>JR$|P>fgG zRF?h~wKe8`MrB>gt2U{O*}dB&u$5M-j18cts#f)}jJASsrE<(Q $88`Ba8&$hv9$Dm zQ*ql}ZTp%#I%@vBSUT!|RA#rpekK=rBjEpeLB&to47-BK0<_%2HEORbOgWRhvpG zRO70Pt4($735#|R_EoWTjFYhcTMifiGt!fKg0_s1;Hdwb|38e-j`!7$ny>!v8KE8H zr#Nc8RxGXg-{9?Jd~#F@2eY7i%raM1wI2co2Mss=f78$o{q7DLZWc>-IC1#j4~Ty~ zXJ*0Cq{D>3Qeyj?sWYpGQ#0Ov@MJq0@k6n6^FN^x|9avlQl?`@5)5 L zJ%T*kJ?_5anJ(Qc^^ZtT5@bE;t`<=Nq(zHEjZIg88vA!pW7CzO#(v0ke?o!nz3U5S zmO8qgfHao2(l*-8{lWdo{l#O{Opl|-(-Y_h9>Wm`&0~hg>^}=Bjv&SJm~uij6QCkz zapWJ=62kxVi1g?dm_*JtFQ69-FfHO{@z{mnw3M68gBtBApj@vwGp(Z66QEYpYv{G~ zIv%_8*n`I+9(y*^8|dedfd-LR%wum(#$%s<7F6V j2hv~QJBQ)#+ z0G0qA2l6 =ciKTLA0y&jRdy0@w#U?%)LM0s-tIbTT|V?nwF=J^-#B&gOnf ze<5J>Il(A|V049G6#6tqE@jS4SLyEwM&Hrb= )a%z!~-Gn2yT7(J89W8l}$Jnq8duFZ^roaZuKdEAX0=<+!Ip9NDkfhmW_-JLM? z1eowsN4n0I_G1bKcnSzS832#-*!Br@oEZi)BM3A@n4!!t2KKpGJkI7ZRG8b$jC8P& ziN`%!Sg7|u3!4gpjfDq0lol4MA}mzR)R2eAc|7hVd;$werL?oj^~?kTqwxfzK7@rP z5*F(FGz;NxotdUFGYL){!!y&F89eUC opz&dpYET(tj3YdkJLwcs$w( z*#QFCTQH@GJi7*TR(rnAfig3 -a%$Cb^@MF&Qgd0f?kQSCnqqb~?XU-G!xiP6^tqi+Bscz9exFoF-jNbGFx z_skChMz;t?bp)fI2u5R{#t3^kGyTFmAQ;_a?lZqKzwy|{V>^%Qc|5L}`Q3rhA3Pr4 zg3-i(6h rYUc z{4`1tcbu7mS#q+^c3?ZQomf~{r}B6jk2xOm&8(cxXTw=oR;Lre3Ceu-pM?^f_cyW$ zJf7i1Nl8#rAp@%+oHUbg(lZWDnkbzl9p`LvD%)AW$v|+LO>pW;Z~`l(CzdSr_1&tTYDbQFP3U2C?*gKD@9dpIoQx7 R=*#vab%5%4VIvg|1{JWO4sz AFE)A8a)78a5vU}g&Ei{!jVIL>Qp1SIT3*x{@h`D|fFup`-Gb`)!3N3$ht zDUX-&csY+@a$m{gRXkqJ<25{9yM-+S CdRE?lVhjUIlMEF|jh}PU@sjdgDd978W zRcgR_r*xdX)Ipu%iFiX+Zl*drDU0-1QnDgBN0*_<%uP}&)H#`{8Odr*u2!Ema6+oC zSeHCd(8v!JzBHP|RA;|VVR>-;V5hRvSQuE1JZ|FgrcLa0b_NTgV>6Er@puR6Y&G;- z`!kl7^BB;}8SATwU4+o3MsqniTLBD-TTc5d{puVxsDQ##QI4ZUhuqB0MGIbF=dttI z1?)l=PMTieF|4((@^}}I-)OZgVVANi3F*t& ?`chX9-VH)h=NsxO5oJV8J1H^~C-A)IwH=aZyCNo1mU3LGmaH z$^VAyo7l~N*O(XCEu 43HD6<}HN}T<;gMIz)^6z4IvwL_9Qprvp zzs{*5(xpNHg@(VQ;sAU2Z%Sciu}9dW4oPq~kN0q@mS#At9oUo9p?==7XP>Zg;HUq$ zRt{mVZW1XR`bWnkfXi8GSXx)dDRe*Mz@a0`YpmlYPHAz)6Ko;iJh=r~!F2^ry)*1! zqd2 =~e4_{f(- MhHyGL_rNF?*}o7etcDtX2QyJzENXd9Ga0NTo3s z&cw|V?21gVE d&Q!~7ZIVcY1cXLMndf~x3|$&K zgG-!@P}40VsHuB8agS@t%o050z`!2zI1412`C98^t5Ps&XpJS-O^;)wNa}LFSMNT3 z|IXf`z3oDu{8noV$kD&xN#~;eh567?4$mTpA5i3Izw_Apu}jf_KKT$mXs}>;0PsA< zy=h4P-@Jv?!-ltTLesGP4@VY{GI@+HDK(ctb%QD_b~DgPrahRaVTN=30A?`~$4!S} zN>)AiHdZ@0$ni2$jk3TnM@oYeUFgLM%NUQ!svgw?z$79Y>?-rJvY=eY+8}iYN4t>o zwH|e2;Z=+2kaq<_-W71#T1CO2tp S*MKu!i5w0m8st4puwuxyO0B%VwU(SXkR<=N zf7Mm>gl_T|3Xi9)(%2iml|cW@Qd2ewr$TsVi7Cg}68?UiWneyp(-ES=>+G3@5bg!x z(e;%@84yl{@b)rmZV`mLLHMJJ`ko}5j1VoGSTSG_ghL?Qt7de5KL{HjTv1}n8Vcc9 z2sc%j^GH7dX7p)`J#PSnp+5RYYi%J(ACC~zrPQ3ABfMwIDr R)Gc*Pinc* zQcEr5D0S2&P)AxR(3S->*T6LmCI@YfmNNm28XWP}OlPJK)0I&>YO_L$2BdJj@8Wpp ztd*GYIcqJ48lAO{1zOv-zAau(jNb;l>`-zQw6LZH9~)5f2 tpNc zRxT{a8@U-M6R40+w-#GU-d}Y4-}IW$zioS1(XQY6wdD&3r<6X$7l1Q+p8bIRg1w03 z@ck|OA$uJ{#A*LC_TyH1`nTZ+f<56J3w&CjjZO{_IIG0*hV%t7g(Us*G@Xz8Oep7x z5-{zkm+)+cqZGnn)$ov>B@UE?8%Y1vL)Z?VW$?BJ%*@(S`6Nd{X(uNi2t@Kr^AEp+ z PBv!{LozYIF|H-`PuyY`Dl8g`c?HUb+dZA z`mXwm$0^j8)jy~|R5wD*O)x6k4Hro4qxaKikQ{#PhvS=lj?i|vTH*lxT5G=c94?Hb z_8d<5t)zvcNgM4gJk^%>+j0QG%ZV0A@9e2DEhDup?-6|4at!IQ|Bj-zJ=%Uo5PHWk z>bxSnG+wS=@m?uj8D7{c4F0uV=@5$W3is;c6#%h4y<)twy*jkwA&hZChtR_o$2Xz* z@hmn3Vx62o+E)Q_R!0g`OM9Peqr6=!$&6-cJF2i4My61cFeg08ISvkKH?oSLCJUG{ z5{|b){Z;V00cdGEYm%9m%tA1m;9-tF{F{-$guo>sc`!5eLvpwzBn7St5yE7)>H_~{ zt`cT%h2tWTZcH|lO6IY)Er8OUBZ5#Nj4mf;0`+Z2hS|m7662EN65}Y_5$}@i($ggu z$z3$$y^G4F7lhMDDm%#7u->4o+PVfS@gI>B^9!>)uckzqDA%eru(}bMiKId3Zh=D< z!m=|Z_11C1JBEC*aAYGvesIf12pELMLXQxW(9W=C=70>)4~#B{ppnpy3g}5IAUhfH z;7vadEe6N+wdi@&4A<(sf_8$BHu1qef!+m&=nuiC`3kIGH{l|k`*4X429r`T_QgSP zc}|qWoHP}#&B?)ia3NfoGYXf3i)1}qkuw7v4wr(HUL)R$Ujv7=x54S`9R3)81y|qv zjDM$SaH;VFZ t43N^)APl3viXoZRSr_40^c)*1+bmgV}Ppf@K!FlHCmZ&EqgbUuEyRxVXrm zfAr9ALtMtVOmdm;vcYAC%VC#uF5kG^b9HqMa!qjU>e|oM ^R8E2 ze{&PLg}Q0oa@~fy)woS}Tj}}+V13bof@E)r@Uhz2Y@tMb6kw_FSN)r``EFw;{TJ);ul;|tb15Y2%c+V`) z;hy!L3q4=-JnZ?g=UuT_94$^44;9 %7;G z5_d_IBttS%GEuTp^19@G$t|h7G+LS^HA$yR*GczDFH7%v`+94<`*~M;&-Z@G`yKD= zKCV8|J~=+6J~Mqb`5g86#+UYu@Xhiq@txt@?0ekzs-KHrj9;GL7{7UbFZ-SKyY27e zpX@)-e}exy|F`_F$Y@!#EKgP?TO`{lyCnNPpi@9bfH`1Jz$*dg1AYzc5SSil4xAgf zBk;q(--F~qIYE^{OM>1A`aGBkjt?#f9v}Q%@bTbV9sD|U?oiTUZik&6KIuqxjPF?3 zaZ<-k9nW;U*D0h^k4|-+)^s}B=~jp=Bt2wI$nubbAvZ#OL%W4qLYIdg3jJR0FVB!y z$ydvd$!~{s4C@(IAJ!OlHtb<|On6cF^za?wpGSB^q(+oQERQ%6aXT_JvTx+%$Ze6I zM7c+$MpZ %iIZ}ZrX}r7x|5ucY)*bI z`J)uyl)fp?rW{H6L#NkSb+71d=p*%`^y~GPQ~gr=r_N73mByxJrcFybkoLf!GuRC~ z4L@~Obgu0DQs?VkV!D{SG b9}lmF{8PP2HQif1MtYUYfo+ z{aQv`#+Z!l89!#KGp(7sGk?u8WKGFBoK0u<$ex>hHpeHYC}(ZX7rEiN<+f5XDvc8|? zN9EV#ztIo%%j>tS-{<{f`j74ZW`RpV|AKV|-xX>KCl{VH`WlOkFB$I-$Q-a}z^6sA zMfF8T21*7FAGmekuY!S4 qp-%$tqb@a JY#xOL-x8$WRT>l3^u)J! ?($z&6t8$^W%A1BS9z?eUv*`5pVfQUM6Ox9=F!@UwI8m_ zT(@I=$Mtj8|GJ@c!};gZpL^x`PS4MK{`ZZRjUP4kXx!5j-L!I(%cgOgzH1)XeDa0V z7q)H=-aK#fA1~Itcx6lBmSbD>TerT{@ufxEsBQJzZfqaE{ezdYU*7wQ;+4i7vK{kY zMX%Ps`u%I8Uc0oj_s%1)r@sEmuBct>cl++1y9e)S*mL`hiZ`z89kTb_zFzx|?C-pP z_nXQ$Upx?YVBK5(Z!J3Lad76rzYa}2bnkH8;ahK)zx~aT;v=6P9eniSv4Ue~kM}-) z>O}5|qbD;?9y-5E*zT9y|cjc|GvcEd>wejmuzbX0V=C`(QA6=dKo%p+z*Fvvty{^4};70C^ z556Dv{neXwHy_@b^@H~h>wk>>ao11jKb^Tf`1aL1);oXwJpXRc-4}mJ{^iKM{`bDP zUw!}KuXBG3`fbaD)CVVjAN2dRhvOf)K3e@p+#mb@?EU9we^vkW7uN|?KQ{Xl&J(u! zd{71v&k2YfKcStvr>P;o-ET-SX)>s89J-&TNks89b(%vb)T(SN74()(9H^eaiRsDr zPy6Sbn=x|$@lfRO6OJmwKx(T1SCt9iL ?F+;BVmSy=(Xe h-4bsX^fOSxMExWqOmT zrQmJ2j(UZ94KB`m2OM55z_oebQFlT9@P}*iI>IG+a=0chfmXxic-`o9I+M-@+sy*M zxBL$I9rHWycggQ_zpwp%^84BEFMr10(_iB6=O5>v=%3+lgmrP4AhA(c_=fhk`|}^c zopNf#PqXJx^kz67IK#fju3+D1KX4op?B(%3I49uoejdNMnO%iy*^BIluxY7 zd3^-i5$L8|1sqN@Q8P$JkNfCMC_OB z6{0XCe)16+hkxlc@4)#bJbugJ55#`Wej_ljxrzN6&8d}2K#Z+*s3nLPZi3C4JYQt& z3D=<+kOrxx-wOvY*U*ASBnD-=^Y$3_ChNFT2i`TZKl1oUi_b56r!}RJ^IprXP+ *mJOKZeJJfCPU-=fiSU!T|N^ocS9$Z^K1J@RC$9>X2?Hq`Z zu0;-aA;%C10!3JYgVyeF>md J1uh*`oc14EHZ%vHF1Fb!@K91llH&$Bz(UF;sX9dJK;fIY|_ zh9i$->}9wg@Kd-O@JqNI@EZ_nudz4Sn{cCNfJ?kfR~MtpbeBagO)jsx>~wh@1lyA? z@3_3{@}A2@mrE`mxqRaCnad+rscVvJy6Yg@qPjC+-PjeDKD z)!pts&V7daGw#p2&vBpUz5s;hCGK0?&w%J0?2+h^=F!EYn@5I6mPd}qAdgayau16~ zl}C+7oyR1P*&a(gmU*o3Smm+CqsgP$W3$H=kC!~Qd%Wzi*W*2p?>v6;_(g<8jL1dg z4g$AW6fEi>>L>~krHC>`Iien-UZOste9 {;$<@top0%X5L}BF`nB%RE WSNxv%eepT*1@VXC>*DXlx5Ph+Z;O8x|02FG{!RS5_>q^y zE7nWr)z@pVSB=+nuNS;t^?J+eu-6f<<6bAd-toHQ^``_&Xo-u&P2wSuNIFU)U|SI* ziIb=$T1m1*CrOo*N+wH|OEyS0N}43ilGh}MB}XL3Bqt=NB&Q{3Bxfa`OTLtRCHY2j zRdP*oLvmB{gXDLqi!@A{A}x^Cf<3`1X|wcY=?>{@($}TCr3a;lrAMU4q$i}Oq*uK~ z-YV~W??K)}y@z{`^e*?V^R{~1y~lY^@Sf;B*?X$@v#@np;l0Yc*?X(^Ht(0ccY5#g z-s8R3`=IxG-j}>Ddw=ZxnfDzZ#>W>nHkm%zKDj c%R*#_D3vPRh^*$c8)WN*rj$d1WQ$WF=Lmz|SckbNk-EW0B6L3UgAv+SPi zSJ{IAD!?_sJwOy74hRki3y27a3Wy0%2B-tH0m%Wnfb@X8fPn!c0*V7n0VM%r0;&RP z0_p;+0W$*@1gs5M7qC9yxqux3#{#|xco6U~;E#a60&!q)U_@Yipe}F-Z2iguErFGR z)q&FkX9ms+oDEyS`GG3}*9SfqxG}IPusQIxz}EwJ2fh(_Ebv6&sld~Lmjgcz{50_M z!0Unc0)GvB5cn|2FGv;?7!(}TF(@i1HYh$QF(@UdIH)veVbH3ew}OrYT@R*$MZvxy z4Iz_4W`-;cSrf7` >V{Ovu@g4?@m|Tn)JvawFtc$WI|ZhujPK zE#zUypP?u;AT&8NBXn@+ywDAy`$Nx!UJLyt^g-yu&_CpqoRPcA-Q`L0bons(2zjyG zBrlPh<>hjVyi#5*ua%FL+vN4~#qy={>bXwek(}jq*+M&GN1C?eZP+o$}rCH(*nG zLVikqI&5s%)G#h=df3dc@56o#dl2?8?2qu$@Uh{x@cQua;h%(G3%?P5GyI1LTLc#| zJz{3Wtcbgj;M^L?M7l&)M^1z->(odt@|(!pkv~WN5_vzWJjxz5E^0#5#HgE5zeW8X z^(gAk=vSlPiar$mcJ$Ghs+fkD=`k~7X2r~onH#e#W<|`Zm^Cr$Vm8F=kGT@d#74v> z#;Rg9u}QIAVsm19#OB5Jj_n)UFSa1o7&|<6WNc+@U92_M9@`K*DRxTiwAh8QOJbjk zeKB@x?6%mKV_%Kk7keP~Q0$S| v1>Zeu%pr z_j9}iHrPYrC&csdGvl9)pA)|nHrvm|H^w)|zZkzYep~#@@q6Nr#-EBm9sgeZ`S^?R zm*YQ |&&C98B(dMJIB z9hITVaAlM-RvE8MR4SF7mFdb%Wsb5Js1y1r3zVajCCWNwgL1NR8mJeZQ7%+2Q7%)i zP_9<41!cqMDy)*L;#7%n{g6gwP-UrdR6SIAs@|%;poAz^nN+1Ji>gvpt*TW`Rn1c^ zSFKX5Rc%mhRBcslSM5-}rrM?2qq?AapzfsZ0(U0#RQFc*RS#4bt4FKN>I!wGx>{YU z9;=?Jo}qq5JzKp%y-2-Oy 3vKCp4!tmo=Yg zu4!&-?rQF99%vqES*@E^q!nwWS|6=STcmB!uGThco3$@$w`zB4-_#z|9@ZY!9@n1K zzN5XQ{Z#w8_KNnZ_L}y4?Jey??Vm}aB)_D9q~N4ZN%Ew)q{Jjuk|rrRNta|yYDn6U zbRg+?(y63(lio|Zl=NlN*Gb 9*(+I^9GV=Stb%)z zJ12Kb&PdKq?wi~{*_d3EJUDr1^7!Np$!{lLNxqSMEBUA7JITMN&?zn{?kS!rk`!-H z=*Ux|Qesl#Q&cIMl;jj$N={18l%kZ8DW;Utl=74@DYlexDHBpArA$rXQZ}R 4U7>D}ZisHUZltbSSErkz<8(80 zvvhNG^K`3qYjx{&&+9JgzS4cGyQceIcT4x9-a{Xt57u|m%k>fZD1DN?o4&VxxV~6F zT5r}@=qvR#`muVu{u%vj{apQg{UZHR{R;hR{aR2xZPvf0Kdt{te?L`}8j;#1wJ>#A z>e|%C)a|MJQV*vdO+AtNPU;7#7g8^!ew_MgnpavJD5!d;4NM!7Hax93ZFHJBtvt=1 zHYsgt8lN^ZZC={Kv?XcF(^jS(O8dbOWC%CJ8IlbdhMtDrhI~VTVX$GCVWh!iC^1wS zYCyro8)h5k85SCr7*-qB8J;sV8a5fW8+I7>8%`R|8qOIm8ZH~YFnneB)^N>m!*JX1 zpkQXftb%0)8w)lSY%bVZu)SbM!Ont11xE^w6`U+MU2vx0Y{3Tw_X>jxvkPkq#}`g3 zoLxAtaCzan!i|M*7alD x=yjpm@@Mhr;h4%{|6h18c!{}mkHM$#p uj4{SIV}em(R2j9#WTVcQYBU(T7`qw!8;gw2jUXlL|6JVK?E{f<#Qy^fpfK+ + + diff --git "a/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTabbarView.h" "b/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTabbarView.h" index 0c634be..98b4501 100644 --- "a/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTabbarView.h" +++ "b/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTabbarView.h" @@ -7,9 +7,13 @@ // #import+ +SchemeUserState ++ +标签栏视图.xcscheme_^#shared#^_ ++ +orderHint +0 +- +#import "HYTopBar.h" @interface HYTabbarView : UIView +/** 标题栏*/ +@property(nonatomic, strong)HYTopBar *topBar; +/** 页面与topBar的距离*/ +@property(nonatomic, assign)CGFloat controllerWithTopBarMargin; /** * 添加一个子控制器 */ diff --git "a/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTabbarView.m" "b/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTabbarView.m" index ea54f62..347ff83 100644 --- "a/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTabbarView.m" +++ "b/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTabbarView.m" @@ -8,16 +8,16 @@ #import "HYTabbarView.h" #import "HYTabbarCollectionCell.h" -#import "HYTopBar.h" -static CGFloat const topBarHeight = 40; //顶部标签条的高度 +//#define topBarHeight FitWidth(30)//顶部标签条的高度 @interface HYTabbarView () @property (nonatomic,strong) NSMutableArray *subViewControllers; -@property (nonatomic,strong) HYTopBar *tabbar; @property (nonatomic,strong) UICollectionView *contentView; @property (nonatomic,assign) CGFloat tabbarWidth; //顶部标签条的宽度 +@property(nonatomic, strong)UICollectionViewFlowLayout *layout; + @end @implementation HYTabbarView @@ -36,10 +36,10 @@ - (instancetype)initWithFrame:(CGRect)frame //添加子控件 - (void)setUpSubview{ - self.tabbar = [[HYTopBar alloc] initWithFrame:CGRectMake(0, 0, HYScreenW, topBarHeight)]; - [self addSubview:self.tabbar]; - self.tabbar.backgroundColor = [UIColor orangeColor]; - self.tabbar.topBarDelegate = self; + self.topBar = [[HYTopBar alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; + [self addSubview:self.topBar]; + self.topBar.backgroundColor = [UIColor whiteColor]; + self.topBar.topBarDelegate = self; [self addSubview:self.contentView]; } @@ -54,7 +54,7 @@ - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSe - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ HYTabbarCollectionCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HYTabbarCollectionCell" forIndexPath:indexPath]; - + cell.subVc = self.subViewControllers[indexPath.row] ; return cell; } @@ -63,7 +63,7 @@ - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cell - (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(nonnull UICollectionViewCell *)cell forItemAtIndexPath:(nonnull NSIndexPath *)indexPath { NSInteger index = (collectionView.contentOffset.x + collectionView.bounds.size.width * 0.5) / collectionView.bounds.size.width; - [self.tabbar setSelectedItem:index]; + [self.topBar setSelectedItem:index]; } @@ -73,12 +73,18 @@ - (void)HYTopBarChangeSelectedItem:(HYTopBar *)topbar selectedIndex:(NSInteger)i self.contentView.contentOffset = CGPointMake(HYScreenW * index, 0); } +-(void)HYTopBarChangeContentViewHeight{ + self.layout.itemSize = (CGSize){self.bounds.size.width,(self.frame.size.height - self.topBar.topBarHeight - self.controllerWithTopBarMargin)}; + _contentView.frame = CGRectMake(0, self.topBar.topBarHeight + self.controllerWithTopBarMargin, HYScreenW, self.layout.itemSize.height); +} #pragma mark - ************************* 对外接口 ************************* + + //外界传个控制器,添加一个栏目 - (void)addSubItemWithViewController:(UIViewController *)viewController{ - [self.tabbar addTitleBtn:viewController.title]; - [self.tabbar setSelectedItem:0]; + [self.topBar addTitleBtn:viewController.title]; + [self.topBar setSelectedItem:0]; [self.subViewControllers addObject:viewController]; [self.contentView reloadData]; } @@ -91,6 +97,12 @@ - (void)selectNewItem{ } #pragma mark - ************************* 懒加载 ************************* +-(void)setControllerWithTopBarMargin:(CGFloat)controllerWithTopBarMargin{ + _controllerWithTopBarMargin = controllerWithTopBarMargin; + self.layout.itemSize = (CGSize){self.bounds.size.width,(self.frame.size.height - self.topBar.topBarHeight - self.controllerWithTopBarMargin)}; + _contentView.frame = CGRectMake(0, self.topBar.topBarHeight + self.controllerWithTopBarMargin, HYScreenW, self.layout.itemSize.height); + +} - (NSMutableArray *)subViewControllers{ if (!_subViewControllers) { @@ -103,12 +115,13 @@ - (UICollectionView *)contentView { if (!_contentView) { UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init]; + self.layout = layout; //设置layout 属性 - layout.itemSize = (CGSize){self.bounds.size.width,(self.bounds.size.height - topBarHeight)}; + layout.itemSize = (CGSize){self.bounds.size.width,(self.frame.size.height - self.topBar.topBarHeight - self.controllerWithTopBarMargin)}; layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; layout.minimumLineSpacing = 0; - _contentView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, topBarHeight, HYScreenW, HYScreenH - topBarHeight - 64) collectionViewLayout:layout]; + _contentView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, self.topBar.topBarHeight + self.controllerWithTopBarMargin, HYScreenW, layout.itemSize.height) collectionViewLayout:layout]; _contentView.showsHorizontalScrollIndicator = NO; _contentView.pagingEnabled = YES; diff --git "a/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTopBar.h" "b/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTopBar.h" index 1650b97..f407b7d 100644 --- "a/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTopBar.h" +++ "b/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTopBar.h" @@ -13,12 +13,58 @@ @class HYTopBar; @protocol HYTopBarDelegate - (void)HYTopBarChangeSelectedItem:(HYTopBar *)topbar selectedIndex:(NSInteger)index; +- (void)HYTopBarChangeContentViewHeight; @end @interface HYTopBar : UIScrollView @property (nonatomic,weak) id topBarDelegate; +/** 标题之间的间距*/ +@property(nonatomic, assign)CGFloat topBarItemMargin; + +/** 顶部标签条的高度*/ +@property(nonatomic, assign)CGFloat topBarHeight; + + +/***********指示条**************/ + +/** 指示条与标题的距离*/ +@property(nonatomic, assign)CGFloat indicatorWithItemMargin; + +/** 指示条颜色*/ +@property(nonatomic, strong)UIColor *indicatorBackgroundColor; + +/** 指示条高度*/ +@property(nonatomic, assign)CGFloat indicatorHeight; + +/** 指示条的宽度是否随标题的宽度变化,默认值为NO*/ +@property(nonatomic, assign)BOOL changeWithItemWidth; + +/** 指示条宽度,默认值为30,如果宽度需要随标题的宽度变化,则不需要设置*/ +@property(nonatomic, assign)CGFloat indicatorWidth; + + +/***************标题*****************/ + +/** 第一个标题X坐标*/ +@property(nonatomic, assign)CGFloat firstItemX; + +/** 标题高度*/ +@property(nonatomic, assign)CGFloat itemHeight; + +/** 标题颜色*/ +@property(nonatomic, strong)UIColor *itemNormalColor; + +/** 标题选中颜色*/ +@property(nonatomic, strong)UIColor *itemSelectedColor; + +/** 标题字体大小*/ +@property(nonatomic, strong)UIFont *itemNormalFont; + +/** 标题选中字体大小*/ +@property(nonatomic, strong)UIFont *itemSelectedFont; + - (void)addTitleBtn:(NSString *)title; - (void)setSelectedItem:(NSInteger)index; diff --git "a/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTopBar.m" "b/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTopBar.m" index dc1ec45..8c006bd 100644 --- "a/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTopBar.m" +++ "b/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/HYTopBar.m" @@ -8,12 +8,14 @@ #import "HYTopBar.h" -static CGFloat const topBarItemMargin = 15; ///标题之间的间距 -static CGFloat const topBarHeight = 40; //顶部标签条的高度 +//static CGFloat const topBarItemMargin = 22.5; ///标题之间的间距 +//static CGFloat const topBarHeight = 18; //顶部标签条的高度 @interface HYTopBar() @property (nonatomic,strong) NSMutableArray *btnArray; @property (nonatomic,strong) UIButton *selectedBtn; +/** 滑动的横线*/ +@property(nonatomic, strong)UIView *indicatorView; @end @implementation HYTopBar @@ -25,6 +27,11 @@ - (instancetype)initWithFrame:(CGRect)frame self.showsHorizontalScrollIndicator = NO; self.showsVerticalScrollIndicator = NO; self.bounces = NO; + + // 滑动条 + UIView *indicatorView = [[UIView alloc] init]; + self.indicatorView = indicatorView; + [self addSubview:indicatorView]; } return self; } @@ -34,12 +41,14 @@ - (void)addTitleBtn:(NSString *)title { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setTitle:title forState:UIControlStateNormal]; [btn sizeToFit]; - btn.titleLabel.font = [UIFont systemFontOfSize:15]; - [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; - [btn setTitleColor:[UIColor redColor] forState:UIControlStateSelected]; + btn.titleLabel.font = self.itemNormalFont; + [btn setTitleColor:self.itemNormalColor forState:UIControlStateNormal]; + [btn setTitleColor:self.itemSelectedColor forState:UIControlStateSelected]; [btn addTarget:self action:@selector(itemSelectedChange:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:btn]; [self.btnArray addObject:btn]; + + [self layoutIfNeeded]; } - (void)itemSelectedChange:(UIButton *)btn { @@ -53,15 +62,28 @@ - (void)itemSelectedChange:(UIButton *)btn { - (void)setSelectedItem:(NSInteger)index { UIButton *btn = self.btnArray[index]; + + // btn.titleLabel.font = self.itemSelectedFont; [UIView animateWithDuration:0.25 animations:^{ self.selectedBtn.selected = NO; - self.selectedBtn.titleLabel.font = [UIFont systemFontOfSize:15]; + self.selectedBtn.titleLabel.font = self.itemNormalFont; btn.selected = YES; - btn.titleLabel.font = [UIFont systemFontOfSize:18]; + btn.titleLabel.font = self.itemSelectedFont; self.selectedBtn = btn; - + + if (self.changeWithItemWidth) { + CGRect newFrame = self.indicatorView.frame; + newFrame.size.width = btn.frame.size.width; + self.indicatorView.frame = newFrame; + } + + + CGPoint newCenter = self.indicatorView.center; + newCenter.x = btn.center.x; + self.indicatorView.center = newCenter; + // 计算偏移量 CGFloat offsetX = btn.center.x - HYScreenW * 0.5; if (offsetX < 0) offsetX = 0; @@ -75,7 +97,12 @@ - (void)setSelectedItem:(NSInteger)index { } }]; } - +- (void)setTopBarHeight:(CGFloat)topBarHeight{ + _topBarHeight = topBarHeight; + if ([self.topBarDelegate respondsToSelector:@selector(HYTopBarChangeContentViewHeight)]) { + [self.topBarDelegate HYTopBarChangeContentViewHeight]; + } +} - (NSMutableArray *)btnArray{ if (!_btnArray) { @@ -85,16 +112,40 @@ - (NSMutableArray *)btnArray{ } - (void)layoutSubviews { - + NSLog(@"-----layoutSubviews"); [super layoutSubviews]; - - CGFloat btnH = topBarHeight; - CGFloat btnX = topBarItemMargin; + self.indicatorView.backgroundColor = self.indicatorBackgroundColor; + + CGRect newFrame = self.indicatorView.frame; + newFrame.size.height = self.indicatorHeight; + self.indicatorView.frame = newFrame; + + CGFloat radius = self.indicatorView.frame.size.height * 0.5; + self.indicatorView.layer.cornerRadius = radius; + + if((!self.changeWithItemWidth) && self.indicatorWidth != 0){ + CGRect newFrame = self.indicatorView.frame; + newFrame.size.width = self.indicatorWidth; + self.indicatorView.frame = newFrame; + }else if(self.indicatorWidth == 0 && !self.changeWithItemWidth){ + CGRect newFrame = self.indicatorView.frame; + newFrame.size.width = 30; + self.indicatorView.frame = newFrame; + } + + CGFloat btnX = self.firstItemX; for (int i = 0 ; i < self.btnArray.count; i++) { - + UIButton *btn = self.btnArray[i]; - btn.frame = CGRectMake(btnX, 0, btn.frame.size.width, btnH); - btnX += btn.frame.size.width + topBarItemMargin; + CGRect titileSize = [btn.titleLabel.text boundingRectWithSize:CGSizeMake(100, 100) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.itemSelectedFont} context:nil]; + + btn.frame = CGRectMake(btnX, 0, btn.frame.size.width, titileSize.size.height); + btnX += btn.frame.size.width + self.topBarItemMargin; + + CGRect newFrame = self.indicatorView.frame; + newFrame.origin.y = CGRectGetMaxY(btn.frame) + self.indicatorWithItemMargin; + self.indicatorView.frame = newFrame; + } self.contentSize = CGSizeMake(btnX, 0); } diff --git "a/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/ViewController.m" "b/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/ViewController.m" index 0cb2920..8b5eabf 100644 --- "a/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/ViewController.m" +++ "b/\346\240\207\347\255\276\346\240\217\350\247\206\345\233\276/ViewController.m" @@ -41,45 +41,61 @@ - (HYTabbarView *)tabbarView{ if (!_tabbarView) { _tabbarView = ({ - HYTabbarView * tabbar = [[HYTabbarView alloc]initWithFrame:CGRectMake(0, 64, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 64)]; + HYTabbarView *tabbarView = [[HYTabbarView alloc]initWithFrame:CGRectMake(0, 120, HYScreenW, HYScreenH - 120 - 44 - 20)]; + tabbarView.controllerWithTopBarMargin = 7; + tabbarView.topBar.topBarHeight = 30; + tabbarView.topBar.topBarItemMargin = 22.5; + tabbarView.topBar.indicatorWithItemMargin = 6; + tabbarView.topBar.indicatorBackgroundColor = [UIColor orangeColor]; + tabbarView.topBar.indicatorHeight = 3; +// tabbarView.topBar.indicatorWidth = 50; + // tabbarView.topBar.changeWithItemWidth = YES; + tabbarView.topBar.firstItemX = 15; + tabbarView.topBar.itemNormalColor = [UIColor blackColor]; + tabbarView.topBar.itemSelectedColor = [UIColor greenColor]; + tabbarView.topBar.itemNormalFont = [UIFont systemFontOfSize:15]; + tabbarView.topBar.itemSelectedFont = [UIFont systemFontOfSize:18]; + + [self.view addSubview:tabbarView]; + TestViewController * vc0 = [[TestViewController alloc]init]; vc0.title = @"推荐"; - [tabbar addSubItemWithViewController:vc0]; + [tabbarView addSubItemWithViewController:vc0]; TestViewController * vc1 = [[TestViewController alloc]init]; vc1.title = @"热点"; - [tabbar addSubItemWithViewController:vc1]; + [tabbarView addSubItemWithViewController:vc1]; TestViewController * vc2 = [[TestViewController alloc]init]; vc2.title = @"视频"; - [tabbar addSubItemWithViewController:vc2]; + [tabbarView addSubItemWithViewController:vc2]; TestViewController * vc3 = [[TestViewController alloc]init]; vc3.title = @"中国好声音"; - [tabbar addSubItemWithViewController:vc3]; + [tabbarView addSubItemWithViewController:vc3]; TestViewController * vc4 = [[TestViewController alloc]init]; vc4.title = @"数码"; - [tabbar addSubItemWithViewController:vc4]; + [tabbarView addSubItemWithViewController:vc4]; TestViewController * vc5 = [[TestViewController alloc]init]; vc5.title = @"头条号"; - [tabbar addSubItemWithViewController:vc5]; + [tabbarView addSubItemWithViewController:vc5]; TestViewController * vc6 = [[TestViewController alloc]init]; vc6.title = @"房产"; - [tabbar addSubItemWithViewController:vc6]; + [tabbarView addSubItemWithViewController:vc6]; TestViewController * vc7 = [[TestViewController alloc]init]; vc7.title = @"奥运会"; - [tabbar addSubItemWithViewController:vc7]; + [tabbarView addSubItemWithViewController:vc7]; TestViewController * vc8 = [[TestViewController alloc]init]; vc8.title = @"时尚"; - [tabbar addSubItemWithViewController:vc8]; + [tabbarView addSubItemWithViewController:vc8]; - tabbar; + tabbarView; }); } return _tabbarView; From 616770338dd4e66f448150154f906ec925b8e945 Mon Sep 17 00:00:00 2001 From: ZCheng <1445114823@qq.com> Date: Fri, 11 Jan 2019 17:58:13 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E8=87=AA=E5=B7=B1=E6=98=AF=E9=9C=80=E6=B1=82=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5f9a767..a620b73 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,51 @@  #####HYTabbarView可灵活配置UI界面 - static CGFloat const topBarItemMargin = 15; ///标题之间的间距 - static CGFloat const topBarHeight = 40; //顶部标签条的高度 + /** 标题之间的间距*/ +@property(nonatomic, assign)CGFloat topBarItemMargin; + +/** 顶部标签条的高度*/ +@property(nonatomic, assign)CGFloat topBarHeight; + + +/***********指示条**************/ + +/** 指示条与标题的距离*/ +@property(nonatomic, assign)CGFloat indicatorWithItemMargin; + +/** 指示条颜色*/ +@property(nonatomic, strong)UIColor *indicatorBackgroundColor; + +/** 指示条高度*/ +@property(nonatomic, assign)CGFloat indicatorHeight; + +/** 指示条的宽度是否随标题的宽度变化,默认值为NO*/ +@property(nonatomic, assign)BOOL changeWithItemWidth; + +/** 指示条宽度,默认值为30,如果宽度需要随标题的宽度变化,则不需要设置*/ +@property(nonatomic, assign)CGFloat indicatorWidth; + + +/***************标题*****************/ + +/** 第一个标题X坐标*/ +@property(nonatomic, assign)CGFloat firstItemX; + +/** 标题高度*/ +@property(nonatomic, assign)CGFloat itemHeight; + +/** 标题颜色*/ +@property(nonatomic, strong)UIColor *itemNormalColor; + +/** 标题选中颜色*/ +@property(nonatomic, strong)UIColor *itemSelectedColor; + +/** 标题字体大小*/ +@property(nonatomic, strong)UIFont *itemNormalFont; + +/** 标题选中字体大小*/ +@property(nonatomic, strong)UIFont *itemSelectedFont; + ####实现思路详解 - 界面分析:分为上下部分,顶部UIScrollView,底部UICollectionView.再实现两部分的联动即可实现 (底部视图相对复杂,占用内存大,底部用UICollectionView实现会比用UIScrollView性能好很多) From 1f7735f8a5c8e515010e1646b5a504e93100a704 Mon Sep 17 00:00:00 2001 From: ZCheng <1445114823@qq.com> Date: Fri, 11 Jan 2019 18:01:34 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E8=87=AA=E5=B7=B1=E7=9A=84=E9=9C=80=E6=B1=82=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index a620b73..ec7c6cc 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,6 @@  #####HYTabbarView可灵活配置UI界面 - /** 标题之间的间距*/ @property(nonatomic, assign)CGFloat topBarItemMargin; /** 顶部标签条的高度*/ @@ -24,40 +23,40 @@ /***********指示条**************/ /** 指示条与标题的距离*/ -@property(nonatomic, assign)CGFloat indicatorWithItemMargin; +indicatorWithItemMargin; /** 指示条颜色*/ -@property(nonatomic, strong)UIColor *indicatorBackgroundColor; +indicatorBackgroundColor; /** 指示条高度*/ -@property(nonatomic, assign)CGFloat indicatorHeight; +indicatorHeight; /** 指示条的宽度是否随标题的宽度变化,默认值为NO*/ -@property(nonatomic, assign)BOOL changeWithItemWidth; +changeWithItemWidth; /** 指示条宽度,默认值为30,如果宽度需要随标题的宽度变化,则不需要设置*/ -@property(nonatomic, assign)CGFloat indicatorWidth; +indicatorWidth; /***************标题*****************/ /** 第一个标题X坐标*/ -@property(nonatomic, assign)CGFloat firstItemX; +firstItemX; /** 标题高度*/ -@property(nonatomic, assign)CGFloat itemHeight; +itemHeight; /** 标题颜色*/ -@property(nonatomic, strong)UIColor *itemNormalColor; +itemNormalColor; /** 标题选中颜色*/ -@property(nonatomic, strong)UIColor *itemSelectedColor; +itemSelectedColor; /** 标题字体大小*/ -@property(nonatomic, strong)UIFont *itemNormalFont; +itemNormalFont; /** 标题选中字体大小*/ -@property(nonatomic, strong)UIFont *itemSelectedFont; +itemSelectedFont; ####实现思路详解 From db1e13f88d3cb7bb741ef20e60271f7e6913b9f3 Mon Sep 17 00:00:00 2001 From: ZCheng <1445114823@qq.com> Date: Fri, 11 Jan 2019 18:03:28 +0800 Subject: [PATCH 4/4] Update README.md --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ec7c6cc..b014685 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,22 @@ itemSelectedFont; if (!_tabbarView) { _tabbarView = ({ - HYTabbarView * tabbar = [[HYTabbarView alloc]initWithFrame:CGRectMake(0, 64, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 64)]; + HYTabbarView *tabbarView = [[HYTabbarView alloc]initWithFrame:CGRectMake(0, 120, HYScreenW, HYScreenH - 120 - 44 - 20)]; + tabbarView.controllerWithTopBarMargin = 7; + tabbarView.topBar.topBarHeight = 30; + tabbarView.topBar.topBarItemMargin = 22.5; + tabbarView.topBar.indicatorWithItemMargin = 6; + tabbarView.topBar.indicatorBackgroundColor = [UIColor orangeColor]; + tabbarView.topBar.indicatorHeight = 3; + // tabbarView.topBar.indicatorWidth = 50; + // tabbarView.topBar.changeWithItemWidth = YES; + tabbarView.topBar.firstItemX = 15; + tabbarView.topBar.itemNormalColor = [UIColor blackColor]; + tabbarView.topBar.itemSelectedColor = [UIColor greenColor]; + tabbarView.topBar.itemNormalFont = [UIFont systemFontOfSize:15]; + tabbarView.topBar.itemSelectedFont = [UIFont systemFontOfSize:18]; + + [self.view addSubview:tabbarView]; //传入九个控制器,每个控制器分别管理对应的视图 UIViewController * vc0 = [[UIViewController alloc]init];