UITableView
TableView中取消選中顏色變化豪娜,在didSelectRowAtIndexPath中寫(xiě)入[tableView deselectRowAtIndePath]就可以取消選中狀態(tài)。當(dāng)然我們可以用dispath_after延遲選中選中哟楷。
TableView的兩種類型瘤载,Plain為分隔線充滿屏幕,且組頭有懸浮模式卖擅。group有默認(rèn)的組頭鸣奔,且每組開(kāi)頭有一個(gè)分隔線沒(méi)法去除。
tableView最好使用Plain模式磨镶,設(shè)置無(wú)分割線溃蔫,在cell中畫(huà)分割線,取消組頭懸浮模式琳猫。取消懸浮如下代碼:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat sectionHeaderHeight = 40;
if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
} else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
}
}
UINavigationBar
全局NavigationBar
UINavigationBar *bar = [UINavigationBar appearance];
設(shè)置半透明效果伟叛,若是半透明的那么顏色,透明度都會(huì)有系統(tǒng)偏移脐嫂,有半透明效果统刮。建議設(shè)置為no。
self.navigationController.navigationBar.translucent = NO;
設(shè)置背景色
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
設(shè)置背景圖
UINavigationBar *bar = [UINavigationBar appearance];
[bar setBackgroundImage:[UIImage imageNamed:@"alert_error_icon"] forBarMetrics:UIBarMetricsDefault];
設(shè)置鏤空顏色
UINavigationBar *bar = [UINavigationBar appearance];
[bar setTintColor:[UIColor grayColor]];
UINavigationItem
設(shè)置鏤空色
//? ? UITextAttributeFont - 字體
//? ? UITextAttributeTextColor - 文字顏色
//? ? UITextAttributeTextShadowColor - 文字陰影顏色
//? ? UITextAttributeTextShadowOffset - 偏移用于文本陰影
UINavigationBar *bar = [UINavigationBar appearance];
[bar setTintColor:[UIColor grayColor]];
//或者
[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:19.0]}];
self.title=[NSString stringWithFormat:@"第%lu頁(yè)",(unsigned long)self.navigationController.viewControllers.count];
自定義顏色账千,使用tintcolor必須要是鏤空?qǐng)D侥蒙,不然會(huì)被著色成為一個(gè)顏色。所以建議使用顯示原圖片著色模式匀奏,代碼如下:
//自定義試圖
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]initWithCustomView:button];
//或者改變圖片作色模式
UIImage *image = [UIImage imageNamed:@"add"];
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]initWithImage:[image imageWithRenderingMode:UIImageRenderingModeAutomatic] style:UIBarButtonItemStyleDone target:nil action:nil];
設(shè)置返回按鈕
說(shuō)一下使用pushViewController切換到下一個(gè)視圖時(shí)鞭衩,navigation controller按照以下3條順序更改導(dǎo)航欄的左側(cè)按鈕(本段摘自網(wǎng)絡(luò)):
1、如果B視圖有一個(gè)自定義的左側(cè)按鈕(leftBarButtonItem)娃善,則會(huì)顯示這個(gè)自定義按鈕论衍;
2、如果B沒(méi)有自定義按鈕聚磺,但是A視圖的backBarButtonItem屬性有自定義項(xiàng)坯台,則顯示這個(gè)自定義項(xiàng);
3瘫寝、如果前2條都沒(méi)有蜒蕾,則默認(rèn)顯示一個(gè)后退按鈕,后退按鈕的標(biāo)題是A視圖的標(biāo)題焕阿;
設(shè)置title的偏移值,常用來(lái)隱藏title咪啡。但是多push幾個(gè)頁(yè)面可能造成ViewControll的Title位置偏移有隱患。一般跳到第三個(gè)試圖的時(shí)候就會(huì)影響控制器的title位置了暮屡。
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)
forBarMetrics:UIBarMetricsDefault];
設(shè)置背景圖
UIImage *backButtonImage = [[UIImage imageNamed:@"fanhui.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 30, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
設(shè)置NavigationItem的位置
+(void)createBarButtonItemTitle:(NSString*)title andImageName:(NSString*)imageName andSEL:(SEL)sel onViewController:(UIViewController*)viewController? andIsLeft:(BOOL)isLeft{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(10, 0, 40, 40);
[button setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
button.layer.cornerRadius =20;
button.layer.masksToBounds = YES;
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]initWithCustomView:button];
//設(shè)置返回按鈕的屬性
UIBarButtonItem *negativeSeperator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
if (isLeft) {
negativeSeperator.width = -20;//此處修改到邊界的距離瑟匆,請(qǐng)自行測(cè)試
viewController.navigationItem.leftBarButtonItems = @[negativeSeperator,buttonItem];
}else{
negativeSeperator.width = -15;//此處修改到邊界的距離,請(qǐng)自行測(cè)試
viewController.navigationItem.rightBarButtonItems = @[negativeSeperator,buttonItem];
}
[button addTarget:viewController action:sel forControlEvents:UIControlEventTouchUpInside];
}
自定義返回按鈕
[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:19.0]}];
self.title=[NSString stringWithFormat:@"第%lu頁(yè)",(unsigned long)self.navigationController.viewControllers.count];
//自定義返回按鈕
self.title=[NSString stringWithFormat:@"第%lu頁(yè)",(unsigned long)self.navigationController.viewControllers.count];
UIImage *backButtonImage = [[UIImage imageNamed:@"fanhui.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 30, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
//將返回按鈕的文字position設(shè)置不在屏幕上顯示
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];
或者
//所有的子界面返回時(shí)都變成了我們定義的文字,如果不想顯示文字愁溜,直接""疾嗅,就會(huì)單獨(dú)顯示一個(gè)系統(tǒng)的返回箭頭圖標(biāo),也是很清晰的感覺(jué)冕象。
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = item;
設(shè)置TitleView
低版本 這里的titleView可能會(huì)受navigationItem影響位置代承,建議可以在給他設(shè)置個(gè)frame。
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"appcoda-logo.png"]];
設(shè)置title
//設(shè)置title
self.title = @"設(shè)置";
navigationItem和navigationBar如果過(guò)于復(fù)雜渐扮,可以隱藏NavigationBar论悴,自定義View作為NavigationBar。同時(shí)如果自定義的ViewController返回按鈕影響title的位置墓律,那么就很難更改title的位置或者所修改LeftBarButtonItem的Insets值膀估。那么建議隱藏系統(tǒng)的返回按鈕自定義UIBarButtonItem作為左邊返回按鈕,但是這種方法很苦逼耻讽,每個(gè)控制器都要寫(xiě)察纯,可以采用子視圖控制器繼承父的方法。
設(shè)置xib customView顯示在sb上针肥,使用IB_DESIGNABLE和IBInspectable饼记。
#import
IB_DESIGNABLE
@interface CustomView : UIView
//如果子類是UIButton 在SB中子類無(wú)法使用該類
@property(nonatomic,assign)IBInspectable NSInteger widthboard;
-(void)setWidthboard:(NSInteger)widthboard;
@end
#import "CustomView.h"
@implementation CustomView
-(void)setWidthboard:(NSInteger)widthboard{
self.layer.borderWidth = widthboard;
self.layer.borderColor = [UIColor redColor].CGColor;
}