经常碰到的小问题和小知识

1.TableView的一些问题

1.去除选中样式

 cell.selectionStyle =UITableViewCellSelectionStyleNone;


2.隐藏分割线

 tableView.separatorStyle = UITableViewCellSeparatorStyleNone;


3.隐藏滚动条

 self.tableView.showsVerticalScrollIndicator = NO;

4.判断当前屏幕是否包含某行cell

[self.tableView.indexPathsForVisibleRows containsObject:indexPath]


5.某一行cell即将开始展示

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath


6.某一行cell即将移出屏幕

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

7.让tableView编辑时可以被点击

tableView.allowsSelectionDuringEditing =YES;



8.控制器的automaticallyAdjustsScrollViewInsets属性

self.automaticallyAdjustsScrollViewInsets =false

简单点说就是automaticallyAdjustsScrollViewInsets根据按所在界面的status bar,navigationbar,与tabbar的高度,自动调整scrollview的 inset,设置为no,不让viewController调整,我们自己修改布局即可~

9.tableView的头部总是有灰块?

可能是设置2个代理的位置不对

delegate好dataSource尽量写在前面->

override func awakeFromNib() {

        self.table?.delegate =self

        self.table?.dataSource =self

    }


不能写在网络请求之后!



2.Scrollview的一些问题:

scrollView最侧边不能滚动

scrollView.bounces = NO;


scrollView. showsVerticalScrollIndicator  =  NO ;


3.tableView最后一行分割线不显示

- (void)layoutSubviews {

    [superlayoutSubviews];

    

    for (UIView *subviewinself.contentView.superview.subviews) {

        if ([NSStringFromClass(subview.class)hasSuffix:@"SeparatorView"]) {

            subview.hidden = NO;

        }

    }

}


4.Cell没有填充上的原因

(1).label 或imageView 没有addSubView
(2).dataArr 没有初始化
(3).tableView没有addSubView
(4).没有reloadData
(5).使用initWith方法创建的View不显示可能是由于self = [super initWithFrame:frame] 


5.按钮Button的问题

1.覆盖按钮的高亮状态
medalBtn.adjustsImageWhenHighlighted = NO; 

2.按钮中的label左对齐

button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 这行代码,把按钮的内容(控件)

的对齐方式修改为水平左对齐,但是这们会紧紧靠着左边,不好看,

所以我们还可以修改属性:

button.titleEdgeInsets = UIEdgeInsetsMake(01000);



6.导航隐藏底部分割线

// 添加上这一句,可以去掉导航条下边的shadowImage,就可以正常显示了self.navigationController.navigationBar.shadowImage = [[UIImage allocinit];


7.自定义collectionView在initWithFrame里操作时不能使用self.rame,因为self还没return

8.AFNetworking设置超时时间要在设置请求格式之后,不然无效:
// 网络请求类

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    // 设置请求格式为JSON

    manager.requestSerializer = [AFJSONRequestSerializerserializer];

    // 解析格式 :不设置具体的解析格式,只需要拿到数据

    manager.responseSerializer = [AFHTTPResponseSerializerserializer];

    [manager.requestSerializerwillChangeValueForKey:@"timeoutInterval"];

    manager.requestSerializer.timeoutInterval =10.f;

    [manager.requestSerializerdidChangeValueForKey:@"timeoutInterval"];



9. 在真机测试的时候往往会突然出现这样一个错误,code signing is required for product type 'Application' in SDK 'iOS 7.0'  ,就是说代码签名证书不对劲。 

解决方案,
 

1.选择工程->Build Settings -> Code Signing -> Code Signing Identity -> Debug -> Any ios SDK 将选项改为:iPhone Developer
 

2.重新下载你的证书,或者修改通配符,或者说修改你的appid 。选择工程 -》Bundle Identifier  修改为最新的appid 。造成这种原因是因为你修改了你的app sdk版本。

10.xib中控件可视化:Editor -> Canvas ->  ShowBoundsRectangles

11.Masonry自动布局
http://www.cocoachina.com/ios/20141219/10702.html

12.当发现系统自带的属性是只读时想要替换,可以用KVC或者Runtime机制

13.显示Mac的隐藏文件:defaults write com.apple.finder AppleShowAllFiles -bool true




14.用代码修改xib里的控件的frame是无效的,需要关闭Autolayout属性
如果你在xib文件里自定义cell的话,默认情况下在代码里修改控件的frame是不起作用的。因为自定义cell的Autolayout属性默认是勾选的。

在xcode右侧的inspector视图里把Autolayout属性的勾去掉就可以了



15.点击了超出父控件范围的按钮怎么办???

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

{

    BOOL inside = [super pointInside:point withEvent:event];

     

    if (!inside && self.selected)

    {

        inside = [self.calloutView pointInside:[self convertPoint:point toView:self.calloutView] withEvent:event];

    }

    

    return inside;

}


- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

{

    UIButton * btn = (UIButton *)[self.view viewWithTag:101];

    if (CGRectContainsPoint(btn.frame, point)) {

        return btn;

    }

    for (UIButton * btn in self.view.frameArr) {

        if (CGRectContainsPoint(btn.frame,point)) {

            return btn;

        }

    }

    

    return self;

}



16.关于@synthesize:
@synthesize

用@property后 会给你声明get 和 set 还有成员属性
复写了set get 你的编译器就找不到属性了 就需要你自己写下@synthesize

如果服务器给你返回的字段有OC的保留字段的话 比如description 也得@synthesize

@property (nonatomic,copy)NSString *description;

@end

@implementation BXTool


@synthesize description = _description;



17.

IOS开发中(null)与的处理

:
不小心在开发过程中,得到了(null)以及的返回值,找了好长时间只找到了一个关于的。

由于要根据返回值进行判断,做出必要反应,因此必须知道返回值所代表的具体字符,在得到(null)后利用isEqual:和@“”,NULL,@“(null)”,nil,Nil比较后均得不到正确结果,弄得不知所措了,但是还是感觉像nil,不得已,创建一个字符串,赋值为nil,打印输出,果然是(null),想不通的是为什么不等。最后试了一下“==”,成功了。费尽周折之后才明白原来要这样用:

if(m_result==nil)

    NSLog(@"KDA!");

}

还有就是,从网上找到了用法:

if([m_result isEqual:[NSNUll null]])

    NSLog(@"KDA!");

}



18.引入第三方库出现file not found

比如iOS 引入支付宝 缺少 #include

解决方法如下:在你的Xcode里的header search paths 里添加支付宝SDK(openssl的路径);格式如下  $(PROJECT_DIR)/文件夹名         (这里说一下,直接点击openssl,然后showinfinder,然后command + i  查看路径,把得到路径的工程名字以后的部分加在文件夹名这OK了)



19.使用sdwebimage给button设置图片不显示,只显示系统蓝色

button的Type需要设置为Custome



20.使用NSNotificationCenter的注意点:

当发送通知的对象还没有创建时 发送通知是接收不到的


21.iPad使用 UIAlertController 的注意点:

let isiPad = UIDevice.currentDevice().userInterfaceIdiom == .Pad

let isiPhone = UIDevice.currentDevice().userInterfaceIdiom == .Phone


if (isiPad) {

           var popPresenter = alertVC.popoverPresentationController

            

            //        popPresenter!.barButtonItem = self.navigationItem.leftBarButtonItem;

            popPresenter?.sourceView = btn

           //        popPresenter!.arrowDirection

            popPresenter?.sourceRect = btn.bounds

            popPresenter?.permittedArrowDirections = .Up

            ////

}



22.使用IQKeyboardManager某个textfield的toolbar,而不影响其他的textfield?

tf.inputAccessoryView = UIView()









*  视图层  不能跳转,必须利用代理或block传到控制器Controller再跳转


*出现该情况 90%是由于数据库少写了传进去的参数 或者没有传入参数或传入的参数类型不对!




你可能感兴趣的:(iOS)