UIButton上的image與label的佈局

     項目中遇到這樣一個問題,button的建立是根據服務器返回的數據來建立,好比label信息和image信息都是服務器返回,比較難搞,由於圖片返回來都是URL,這是確定沒有錯誤的,不可能服務器給你返回一個圖片。
     涉及到一個問題,白以前沒使用過相似方式設計按鈕,多數狀況下都是使用本地圖片來建立,button上是有個set方法,可是這個方法就是我說的直接付本地圖片名的。
     後經旁牛教誨,第三方管理網絡圖片的插件有相應功能,我便導入<UIButton+WebCache>,使用sd_setImageWithURL方法便輕易的解決了此問題。
     又涉及到了一個新的問題,就是,此圖片並非按原圖大小而展現,他是平鋪到了整個button上,這就形成了不只圖片被拉伸的不成樣子,並且圖片過大至關難看,想都不用想,這種方式是確定不行的。可是雖然問題解決了,是給圖片作了一個等比例的縮小,但是這種方法我以爲確定是不對的。
     爲何說不對呢,由於又涉及到了一個問題,沒辦法掌握移動尺寸,使用setImageEdgeInsets和setTitleEdgeInsets時無法找到一個可掌握的辦法來自動適應屏幕。
 
     這麼多問題,我以爲應該先從導入的那個第三方來捋順起,不用想,網上確定有跟我同樣的問題的,我又不是大神,能遇到別人遇不到的問題,OC立刻就要退出市場了,我還爲OC的問題,確定是不對的。去找找看!
 
     找到了相似的問題,可是並非解決了圖片縮小的問題,可是經過使用他的方法,連圖片被平鋪的問題都修復了,仍是按照上面那種加載圖片的方法[button sd_setImageWithURL: forState:];可是導師的方法是此button要去繼承一個父button,父button來重寫兩個方法:
     - (CGRect)titleRectForContentRect:(CGRect)contentRect;
     - (CGRect)imageRectForContentRect:(CGRect)contentRect;
     其實旁牛也一直在說我這麼寫代碼太長,應該把設置放到父類裏。可是當時我也不會,不知道到時候怎麼整init或者其餘什麼的。看了導師的代碼我不但完成了,並且還完成了呵呵呵,其實仍是一臉懵逼啊!
     
@interface MemberButton : UIButton

@end

@implementation MemberButton

- (instancetype)initWithFrame:(CGRect)frame {
    self = [superinitWithFrame:frame];
    if (self) {
        self.titleLabel.font = [UIFontsystemFontOfSize:15.f];
        self.titleLabel.textAlignment = NSTextAlignmentCenter;
        [selfsetTitleColor:[UIColorcolorWithWhite:153.f/255.falpha:1.f] forState:UIControlStateNormal];
    }
   
    returnself;
}

- (CGRect)titleRectForContentRect:(CGRect)contentRect {
    returnCGRectMake(0.f, contentRect.size.height / 5.f * 3.f, contentRect.size.width, contentRect.size.height / 5.f * 2.f);
}

- (CGRect)imageRectForContentRect:(CGRect)contentRect {
    CGFloat width = contentRect.size.width;
    CGFloat height = contentRect.size.height;
    returnCGRectMake(width / 3.5f, height / 10.f, width / 7.f * 3.f, height / 5.f * 3.f - height / 10.f * 2.f);
}

@end
 
     上面那幾個浮點值的修改就能相應改出你所須要的文字與圖片的相對位置,並且是能自動屏幕適配的,這點纔是最棒的,要否則還有根據屏寬去設定兩套或多套偏移方案。
相關文章
相關標籤/搜索