如何检测应用更新?
你可以使用友盟等第三方工具,但如果你只想使用轻量级的方法,只需GET这个接口:
http://itunes.apple.com/lookup?id=
你的应用程序的ID
,解析返回的json字符串就行。
我想完全复制一个 UIView 怎么办,copy 方法好像用不了
iOS 中并不是所有对象都支持copy,只有遵守NSCopying协议的类才可以发送copy消息,当用你试图使用类似于
UIView *v = [_v1 copy]
方式复制一个UIView时,会抛出一个名为
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView copyWithZone:]: unrecognized selector sent to instance 0x7ff163d12060'
的异常。这时候我们可以采取使用对象序列化方式复制对象:
NSData
*data = [NSKeyedArchiver
archivedDataWithRootObject:_v1];
UIView
*v = [NSKeyedUnarchiver
unarchiveObjectWithData:data];
一般我们用来指定 tableviewcell 的高度时使用
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
方法返回一个固定的高度。但这个方法会被 n 多次调用,其实你只要这么指定下高度就可以
self.tableView.rowHeight = 100
。
我只是想修改导航栏返回按钮的文字,其他啥都不想干
你可以尝试在
viewWillDisappear
方法里这么干:
项目中静态库有真机和模拟器两个版本,可不可以合并为一个
在 Xcode 中创建一个静态库文件,编译后会生成两个版本,一个是模拟器版本,一个是真机版本。所以导致后续引入静态库非常不方便,因此很有必要把这两个库打包成一个。合并以后的静态库文件大小是未合并的两个静态库之和。方法如下:
lipo -create
"path/to/模拟器专用lib.a"
"path/to/真机专用lib.a"
-output
"path/to/通用lib.a"
1
2
3
4
#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c
"Print CFBundleVersion"
"$INFOPLIST_FILE")
buildNumber=$(($buildNumber
+
1))
/usr/libexec/PlistBuddy -c
"Set :CFBundleVersion
$buildNumber"
"$INFOPLIST_FILE"
1.TableView不显示没内容的Cell怎么办?
类似于图1,我不想让下面的那些空显示。很简单,添加“self.tableView.tableFooterView = [[UIView alloc] init];”试过都说好,加完这句之后就变成了图2的样子。
2.自定义了leftBarbuttonItem左滑返回手势失效了怎么办?
self.navigationItem.leftBarButtonItem=[[UIBarButtonItemalloc]
initWithImage:img
style:UIBarButtonItemStylePlain
target:self
action:@selector(onBack:)];
self.navigationController.interactivePopGestureRecognizer.delegate=(id<UIGestureRecognizerDelegate>)self;
3.ScrollView莫名其妙不能在viewController划到顶怎么办?
self.automaticallyAdjustsScrollViewInsets=NO;
4. 键盘事件写得好烦躁,都想摔键盘了怎么办?
●买个结实的键盘;
●使用IQKeyboardManager(GitHub上可搜索),用完之后腰也不疼了,腿也不酸了。
5.为什么我的App老是不流畅,到底哪里出了问题?
这个神器叫做:KMCGeigerCounter,快去GitHub上搬运吧。
6.怎么在不新建一个Cell的情况下调整separaLine的位置?
_myTableView.separatorInset=UIEdgeInsetsMake(0,100,0,0);
7.怎么点击self.view就让键盘收起,需要添加一个tapGestures么?
-(void)touchesBegan:(NSSet*)toucheswithEvent:(UIEvent*)event
[self.viewendEditing:YES];
8. 怎么给每个ViewController设定默认的背景图片?
使用基类啊,少年。
9.想在代码里改在xib里添加的layoutAttributes,但该怎么用代码找?
像拉Button一样地拉你的约束,nslayoutattribute也是可以拉线的。
10.怎么像Safari一样滑动的时候隐藏navigationbar?
navigationController.hidesBarsOnSwipe=Yes
11. 导航条返回键带的title太讨厌了,怎么让它消失?
[[UIBarButtonItemappearance]setBackButtonTitlePositionAdjustment:UIOffsetMake(0,-60)
forBarMetrics:UIBarMetricsDefault];
12. CoreData用起来好烦,语法又臭又长怎么办?
MagicRecord
13. CollectionView怎么实现tableview那种悬停的essay-header?
CSStickyHeaderFlowLayout
14.能不能只用一个pan手势来代替UISwipegesture的各个方向?
-(void)pan:(UIPanGestureRecognizer*)sender
typedefNS_ENUM(NSUInteger,UIPanGestureRecognizerDirection){
UIPanGestureRecognizerDirectionUndefined,
UIPanGestureRecognizerDirectionUp,
UIPanGestureRecognizerDirectionDown,
UIPanGestureRecognizerDirectionLeft,
UIPanGestureRecognizerDirectionRight
staticUIPanGestureRecognizerDirectiondirection=UIPanGestureRecognizerDirectionUndefined;
switch(sender.state){
caseUIGestureRecognizerStateBegan:{
if(direction==UIPanGestureRecognizerDirectionUndefined){
CGPointvelocity=[sendervelocityInView:recognizer.view];
BOOLisVerticalGesture=fabs(velocity.y)>fabs(velocity.x);
if(isVerticalGesture){
if(velocity.y>0){
direction=UIPanGestureRecognizerDirectionDown;
}else{
direction=UIPanGestureRecognizerDirectionUp;
else{
if(velocity.x>0){
direction=UIPanGestureRecognizerDirectionRight;
}else{
direction=UIPanGestureRecognizerDirectionLeft;
break;
caseUIGestureRecognizerStateChanged:{
switch(direction){
caseUIPanGestureRecognizerDirectionUp:{
[selfhandleUpwardsGesture:sender];
break;
caseUIPanGestureRecognizerDirectionDown:{
[selfhandleDownwardsGesture:sender];
break;
caseUIPanGestureRecognizerDirectionLeft:{
[selfhandleLeftGesture:sender];
break;
caseUIPanGestureRecognizerDirectionRight:{
[selfhandleRightGesture:sender];
break;
default:{
break;
break;
caseUIGestureRecognizerStateEnded:{
direction=UIPanGestureRecognizerDirectionUndefined;
break;
default:
break;
15. 拉伸图片的时候怎么才能让图片不变形?
UIImage*image=[[UIImageimageNamed:@"xxx"]stretchableImageWithLeftCapWidth:10topCapHeight:10
注:
有开发者提醒这个已经弃用,现在的方法叫resizableImageWithCapInsets。
方法二,如图:
16.怎么播放GIF的时候这么卡,有没有好点的库?
FlipBoard出品的FLAnimatedImage太适合你了。
17.怎么一句话添加上拉刷新?
使用SVPullToRefresh库:
[tableViewaddPullToRefreshWithActionHandler:^{
//prependdatatodataSource,insertcellsattopoftableview
//call[tableView.pullToRefreshViewstopAnimating]whendone
}position:SVPullToRefreshPositionBottom];
18. 怎么把tableview里Cell的小对勾颜色改成别的颜色?
19. 本来我的statusbar是lightcontent的,结果用UIImagePickerController会导致我的statusbar的样式变成黑色,怎么办?
-(void)navigationController:(UINavigationController*)navigationControllerwillShowViewController:(UIViewController*)viewControlleranimated:(BOOL)animated
[[UIApplicationsharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
20. 怎么把我的navigationbar弄成透明的而不是带模糊的效果?
[self.navigationBarsetBackgroundImage:[UIImagenew]
forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage=[UIImagenew];
self.navigationBar.translucent=YES;
21. 怎么改变uitextfield placeholder的颜色和位置?
继承uitextfield,重写这个方法:
-(void)drawPlaceholderInRect:(CGRect)rect{
[[UIColorblueColor]setFill];
[self.placeholderdrawInRect:rectwithFont:self.fontlineBreakMode:UILineBreakModeTailTruncationalignment:self.textAlignment];
1、更加强大的Log输出
#define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt),
PRETTY_FUNCTION
,
LINE
, ##
VA_ARGS
);
NSInteger
numberA =
100;DLog(@"numberA is %ld",numberA);NSArray
*arrayA = @[@"A",@"B",@"C"];DLog(@"arrayA is %@",arrayA);
打印的内容包括所在的类,所在的方法,所在行数。
2、布局时候使用
CGRectInset
,设置左右、上下边距
UIView
*blackView = [[UIView
alloc] initWithFrame:CGRectInset(self.view.bounds,
10,30)];blackView.backgroundColor
= [UIColor
blackColor];[self.view
addSubview:blackView];
3、CFAbsoluteTimeGetCurrent()计算时间差
NSTimeInterval
startTime = CFAbsoluteTimeGetCurrent();NSURL
*url = [NSURLURLWithString:@"
http://m.weather.com.cn/atad/101280601.html
"];NSData
*data = [NSDatadataWithContentsOfURL:url];DLog(@"data is %@",data);NSTimeInterval
endTime = CFAbsoluteTimeGetCurrent();DLog(@"time gap is %f",endTime - startTime);