UIView、Table、TabBar、Navigation等小功能集锦

来源:互联网 发布:db2执行sql脚本 编辑:程序博客网 时间:2024/05/02 00:21
一、禁止横屏旋转1、#pragma mark - 禁止横屏-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {    returnUIInterfaceOrientationMaskPortrait;}2、//自动旋转- (BOOL)shouldAutorotate {    returnNO;}//支持的屏幕转向- (UIInterfaceOrientationMask)supportedInterfaceOrientations{    //使用  UIInterfaceOrientationPortrait横屏播放视频结束后,app依然横屏,而table回到竖屏,不与app保持一致    //return UIInterfaceOrientationPortrait;    //使用  UIInterfaceOrientationMaskPortrait横屏播放视频结束后,app与table一起回到竖屏,保持了一致    returnUIInterfaceOrientationMaskPortrait;}二、TabBarController1、这个控制器是tableviewcontroller,当后续页面直接用pop返回root时,需要删除自带的tabbar-(void)viewWillLayoutSubviews{    [superviewWillLayoutSubviews];    for (UIView *childinself.tabBarController.tabBar.subviews) {        if ([childisKindOfClass:NSClassFromString(@"UITabBarButton")]) {           [child removeFromSuperview];        }    }}for (UIView *childinself.tabBarController.tabBar.subviews) {        if ([childisKindOfClass:[UIControlclass]]) {            [child removeFromSuperview];        }    }2、隐藏底部tabbar//1.设置self.tabBarController.tabBar.hidden=YES;     self.tabBarController.tabBar.hidden=YES; //2.如果在push跳转时需要隐藏tabBar,设置self.hidesBottomBarWhenPushed=YES;三、NavigationController1、设置导航条颜色nav.navigationBar.barTintColor=[UIColorredColor];[self.navigationController.navigationBarsetBarTintColor:COLOR_S_WHITE];2、设置给定控制状态标题的文本属性    [self.navigationController.navigationBarsetTitleTextAttributes:[NSDictionarydictionaryWithObjectsAndKeys:COLOR_S_BLACK,NSForegroundColorAttributeName,nil]];3、隐藏导航条self.navigationController.navigationBarHidden =NO;4、navigationBar的毛玻璃效果 。translucent设置为YES时,导航栏呈现半透明效果iOS7之后由于navigationBar.translucent默认是YES,坐标零点默认在(0,0)点  当不透明的时候,零点坐标在(0,64);如果你想设置成透明的,而且还要零点从(0,64)开始,那就添加:self.edgesForExtendedLayout = UIRectEdgeNone; self.navigationController.navigationBar.translucent = YES;5、// 隐藏导航栏下方的分割线    [self.navigationController.navigationBarsetBackgroundImage:[[UIImagealloc]init]                                                 forBarPosition:UIBarPositionAny                                                    barMetrics:UIBarMetricsDefault];    [self.navigationController.navigationBarsetShadowImage:[UIImagenew]];6、设置导航条的字体颜色nav.navigationBar.titleTextAttributes=[NSDictionarydictionaryWithObject:[UIColorredColor]forKey:NSForegroundColorAttributeName];//导航标题字颜色    [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : COLOR_S_WHITE}];四、TableView1、table的滚动self.tableView.scrollEnabled =NO; //设置tableview 不能滚动2、table一键回到顶部(1)[self.tableView setContentOffset:CGPointMake(0, 0) animated:YES]; (本人使用这个奏效)(2)- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;(3)设置scrollsToTop = YES;这个属性,点击状态栏就可以返回顶部了。3、设置cell不可编辑table.allowsSelection =NO;4、scrollView滑动时键盘消失属性;(ios7版本才有)    _table.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;五、UIScrollView1、设置导航栏下的空白位置是否自动下移//根据状态栏、导航栏、底部栏自动调节导航栏以下空白是否下移    self.automaticallyAdjustsScrollViewInsets =NO;2、scrollView滑动时键盘消失属性;(ios7版本才有)    _table.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;    六、UIButton1、设置控件边框颜色以及宽度btn.layer.borderColor = [UIColorredColor].CGColor;btn.layer.borderWidth =1;2.设置UIButton的文字显示位置、字体的大小、字体的颜色  //设置按钮上的自体的大小  //[btn setFont: [UIFont systemFontSize: 14.0]]; //这种可以用来设置字体的大小,但是可能会在将来的SDK版本中去除改方法  //应该使用  btn.titleLabel.font = [UIFont systemFontOfSize: 14.0];  tvnamelabel=[[UIButton alloc]initWithFrame:CGRectMake(5,5,200,40)];  这样初始化的button,文字默认颜色是白色的,所有如果背景也是白色的话,是看不到文字的,  btn.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft ;//设置文字位置,现设为居左,默认的是居中  有些时候我们想让UIButton的title居左对齐,我们设置  btn.textLabel.textAlignment = UITextAlignmentLeft  是没有作用的,我们需要设置  btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;  但是问题又出来,此时文字会紧贴到做边框,我们可以设置  btn.contentEdgeInsets = UIEdgeInsetsMake(0,10, 0, 0);  使文字距离做边框保持10个像素的距离。  设置UIButton上字体的颜色设置UIButton上字体的颜色,不是用:  [btn.titleLabel setTextColor:[UIColorblackColor]];  btn.titleLabel.textColor=[UIColor redColor];  而是用:  [btn setTitleColor:[UIColor blackColor]forState:UIControlStateNormal];七、UILabel给所有view设置圆角 给圆角view加阴影,传统加阴影的方法是不行的,  传统的方法就是:  avatarImageView.layer.shadowColor = [UIColor blackColor].CGColor;  avatarImageView.layer.shadowOffset = CGSizeMake(0, 1);  avatarImageView.layer.shadowOpacity = 1;因为setMasksToBounds表示对frame外的内容进行了裁减,只可显示frame内的内容。由于这种方法加的阴影在frame外,所以被裁减了。  传统方法不行,那我们可以把圆角的avatarImageView放到一个大小与它一样的的UIView中,让这个view有阴影,那效果看起来就一样了。  CGRect rect = CGRectMake(0, 0, 48, 48);  avatarImageView = [[UIImageView alloc] initWithFrame:rect];  avatarImageView.image = [UIImage imageNamed:@"test.png"];  //Round the corners  CALayer * layer = [avatarImageView layer];  [layer setMasksToBounds:YES];  [layer setCornerRadius:9.0];  //Add a shadow by wrapping the avatar into a container  UIView * shadow = [[UIView alloc] initWithFrame: rect];  avatarImageView.frame = CGRectMake(0,0,rect.size.width, rect.size.height);  // setup shadow layer and corner  shadow.layer.shadowColor = [UIColor grayColor].CGColor;  shadow.layer.shadowOffset = CGSizeMake(0, 1);  shadow.layer.shadowOpacity = 1;  shadow.layer.shadowRadius = 9.0;  shadow.layer.cornerRadius = 9.0;  shadow.clipsToBounds = NO;  // combine the views  [shadow addSubview: avatarImageView];   [self.view addSubView:shadow];//设置圆角    view.layer.cornerRadius = height /2;    view.layer.masksToBounds =YES;    //view.clipsToBounds = YES;UIView 的 clipsToBounds属性和CALayer的setMasksToBounds属性表达的意思是一致的。取值:BOOL(YES/NO)作用:决定了子视图的显示范围。具体的说,就是当取值为YES时,剪裁超出父视图范围的子视图部分;当取值为NO时,不剪裁子视图。默认值为NO。1、根据label里的文字来自动适应尺寸[labelsizeToFit];2、根据label固定宽度来调节label的字体大小adjustsFontSizeToFitWidth:文字内容自适应标签度,默认NO label.adjustsFontSizeToFitWidth = YES;八、UITextField1、设置文本框的样式   _textField.borderStyle =UITextBorderStyleRoundedRect;2、属性returnKeyType设置return键类型   _textField.returnKeyType =UIReturnKeySend;3、自动可用return键   _textField.enablesReturnKeyAutomatically =YES;4、英文首字母是否大写   _textField.autocapitalizationType =UITextAutocapitalizationTypeNone;5、清除键的显示方式   _textField.clearButtonMode =UITextFieldViewModeWhileEditing;九、删除子视图1、//依次遍历self.view中的所有子视图    for(id tmpView in [self.viewsubviews])    {        //找到要删除的子视图的对象        if([tmpView isKindOfClass:[UIImageViewclass]])        {            UIImageView *imgView = (UIImageView *)tmpView;            if(imgView.tag == 1)   //判断是否满足自己要删除的子视图的条件            {                [imgView removeFromSuperview]; //删除子视图                break;  //跳出for循环,因为子视图已经找到,无须往下遍历            }        }    }2、//依次遍历self.view中的所有子视图    for(UIButton *buttonin [cellsubviews])    {        //找到要删除的子视图的对象        if([buttonisKindOfClass:[UIButtonclass]])        {            [button removeFromSuperview];        }    }3、[view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];十、遮罩背景//覆盖导航栏,将View添加在keyWindow上        UIWindow *win = [[UIApplicationsharedApplication]keyWindow];        topView = [win.subviewsfirstObject];十一、状态栏[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];如果状态栏背景为浅色,应选用黑色字样式(UIStatusBarStyleDefault,默认值);如果背景为深色,则选用白色字样式(UIStatusBarStyleLightContent)。1、控件的局部圆角问题一个button或者label,只要右边的两个角圆角,或者只要一个圆角。该怎么办呢?这就需要图层蒙版来帮助我们了    CGRect rect = CGRectMake(0, 0, 100, 50);    CGSize radio = CGSizeMake(5, 5);//圆角尺寸    UIRectCorner corner = UIRectCornerTopLeft|UIRectCornerTopRight;//这只圆角位置    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corner cornerRadii:radio];    CAShapeLayer *masklayer = [[CAShapeLayer alloc]init];//创建shapelayer    masklayer.frame = button.bounds;    masklayer.path = path.CGPath;//设置路径    button.layer.mask = masklayer;举例为button,其它继承自UIView的控件都可以2、navigationBar的透明问题如果仅仅把navigationBar的alpha设为0的话,那就相当于把navigationBar给隐藏了,大家都知道,父视图的alpha设置为0的话,那么子视图全都会透明的。那么相应的navigationBar的标题和左右两个按钮都会消失。这样显然达不到我们要求的效果。(1)如果仅仅是想要navigationBar透明,按钮和标题都在可以使用以下方法:    [self.navigationController.navigationBar setBackgroundImage:[UIImage new]    forBarMetrics:UIBarMetricsDefault];//给navigationBar设置一个空的背景图片即可实现透明,而且标题按钮都在细心的你会发现上面有一条线如下图:这就需要我们做进一步处理,把线去掉,如下方法即可:    self.navigationController.navigationBar.shadowImage = [UIImage new];    //其实这个线也是image控制的。设为空即可(2)如果你想在透明的基础上实现根据下拉距离,由透明变得不透明的效果,那么上面那个就显得力不从心了,这就需要我们采用另外一种方法了    //navigationBar是一个复合视图,它是有许多个控件组成的,那么我们就可以从他的内部入手    [[self.navigationController.navigationBar subviews] objectAtIndex:0].alpha = 0;//这里可以根据scrollView的偏移量来设置alpha就实现了渐变透明的效果3、全局设置navigationBar标题的样式和barItem的标题样式    //UIColorWithHexRGB( )这个方法是自己定义的,这里只需要给个颜色就好了    [[UINavigationBar appearance] setBarTintColor:UIColorWithHexRGB(0xfefefe)];    [[UINavigationBar appearance] setTitleTextAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:18],NSForegroundColorAttributeName:UIColorWithHexRGB(0xfe6d27)}];    [[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:10],NSForegroundColorAttributeName : UIColorWithHexRGB(0x666666)} forState:UIControlStateNormal];    [[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSiz4、navigationBar隐藏显示的过度一个页面隐藏navigationBar,另一个不隐藏。两个页面进行push和pop的时候,尤其是有侧滑手势返回的时候,不做处理就会造成滑动返回时,navigationBar位置是空的,直接显示一个黑色或者显示下面一层视图,很难看。这就需要我们加入过度动画来隐藏或显示navigationBar:在返回后将要出现的页面实现viewWillAppear方法,需要隐藏就设为YES,需要显示就设为NO    - (void)viewWillAppear:(BOOL)animated{    [super viewWillAppear:animated];    [self.navigationController setNavigationBarHidden:NO animated:YES];    }5、给webView添加头视图webView是一个复合视图,里面包含有一个scrollView,scrollView里面是一个UIWebBrowserView(负责显示WebView的内容)    UIView *webBrowserView = self.webView.scrollView.subviews[0];//拿到webView的webBrowserView    self.backHeadImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenWidth*2/3.0)];    [_backHeadImageView sd_setImageWithURL:[NSURL URLWithString:self.imageUrl] placeholderImage:[UIImage imageNamed:@"placeholderImage"]];    [self.webView insertSubview:_backHeadImageView belowSubview:self.webView.scrollView];    //把backHeadImageView插入到webView的scrollView下面    CGRect frame = self.webBrowserView.frame;    frame.origin.y = CGRectGetMaxY(_backHeadImageView.frame);    self.webBrowserView.frame = frame;    //更改webBrowserView的frame向下移backHeadImageView的高度,使其可见6、模态跳转的动画设置设置模态跳转的动画,系统提供了四种可供选择    DetailViewController *detailVC = [[DetailViewController alloc]init];    //UIModalTransitionStyleFlipHorizontal 翻转    //UIModalTransitionStyleCoverVertical 底部滑出    //UIModalTransitionStyleCrossDissolve 渐显    //UIModalTransitionStylePartialCurl 翻页    detailVC.modalTransitionStyle = UIModalTransitionStylePartialCurl;    [self presentViewController:detailVC animated:YES completion:nil];7、图片处理只拿到图片的一部分    UIImage *image = [UIImage imageNamed:filename];    CGImageRef imageRef = image.CGImage;    CGRect rect = CGRectMake(origin.x, origin.y ,size.width, size.height);    //这里的宽高是相对于图片的真实大小    //比如你的图片是400x400的那么(0,0,400,400)就是图片的全尺寸,想取哪一部分就设置相应坐标即可    CGImageRef imageRefRect = CGImageCreateWithImageInRect(imageRef, rect);    UIImage *imageRect = [[UIImage alloc] initWithCGImage:imageRefRect];8、给UIView设置图片    UIImage *image = [UIImage imageNamed:@"playing"];    _layerView.layer.contents = (__bridge id)image.CGImage;    _layerView.layer.contentsCenter = CGRectMake(0.25, 0.25, 0.5, 0.5);    //同样可以设置显示的图片范围    //不过此处略有不同,这里的四个值均为0-1之间;对应的依然是写x,y,widt,height


10 0
原创粉丝点击