1. 在button中加入图片并设置文字,默认图片在左边,文字在右边。(故事板)
2. cocoapods 出现invalid+byte+sequence+in+UTF-8 这种错误:
将podfile中的注释中文删除。
3. 高德地图使用2.4.0(含)之后版本的SDK,需在info.plist中追加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription字段,以申请相应的权限。
4. autolayout 动画:这个约束加到哪个view上,就由这个[view layoutIfNeeded];
不能用子view来 layoutIfNeeded。 不然没效果。
往控件上手动添加约束,不会立刻改变它的frame,则可用[self.viewlayoutIfNeeded]; 立刻改变它的frame。
5. 如何从xib加载控制器:
news2ViewController*viewcontroller = [[news2ViewControlleralloc]initWithNibName:@"news2ViewController"bundle:nil];
6.关于初始化NSDictionary的坑:字典里面的value可能为nil会报错--[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to inser nil object from objects[0]。
解决办法NSDictionary初始化的坑 - 推酷。
//value:key这种标准化的字典生成方式不会出错!
NSDictionary*attribute = [NSDictionary dictionaryWithObjectsAndKeys:self.article.font,NSFontAttributeName,nil];
7. //切记改变了约束以后要立马下一句,这样会刷新约束,否则原来的frame不会改变
[self.articlelayoutIfNeeded];
8. scrollview的竖直范围是指:子视图离scrollview的bottom的距离,所以设定30即可,不用在程序中做随时更改。
9. this class is not key value coding-compliant for the key send.'
xib连线出错。
10. textView 换行符:\r\n
11. Impossible to set up layout with view hierarchy unprepared for constraint.这个错误是由于view1与view2同为scrollview里面的子视图,想用约束建立他们之间的关系,然而,view1是在SB中往scrollview中添加的,在SB上面给scrollview添加的子视图却没有加入到scrollview的视图层次关系中所以才会报没有添加层次关系的错。
改正方法,在viewDidload方法中把这句话[self.scrollview addsubview:view1];放在添加view2之间。
12. 如果viewController或视图A从xib加载,那么在它的viewDidLoad方法中不能[NSBundle mainBundle] load... 它自己了。
viewDidLoad方法是在 先加载了xib中所有的视图(即创建他们并构建层级关系),然后才调用viewDidLoad方法。
13. 约束是有identifier可以唯一识别的。这样就不用拖线了。。。
14. 关于initWithCoder方法只会初始化自己,此时故事板上的子视图也没有被初始化,self与原来的子视图更没有建立起层级关系,因此只能往self上添加子视图,并建立self和新子视图的层次关系。
awakeFromNib相当于viewDidLoad,所有层级关系已经建立。
updateConstraints方法一定要调用super。。。。
如果使用纯代码写,则init方法里面可以设置self子视图与子视图之间的层次关系(即上述规则不成立)。
注:用init生成view 不会执行awakeFromNib。
15. 给xib文件添加手势,会出现手势不响应的情况。原因是:xib的加载方法loadNibName 中owner要设为self。
16. 发通知的优点:不受view的层级限制。
17. terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "shipinView" nib but the view outlet was not set
出现这种错误的原因是:
我在创建shipinViewController的时候,控制器加载view,会先去shipinView.xib找,然而我真的有个文件叫shipinView.xib,而这个xib不是我想要的控制器的view,xcode以为他是,所以就报 nib but the view outlet was not set的错误。没有把控制器的view和xib的view关联起来。
所以,给view命名xib时候,不要带view。
18. 屏幕旋转:
本控制器及其子控制器能不能旋转
- (BOOL)shouldAutorotate{
returnYES;
}
本控制器及其子控制的旋转方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return(UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskLandscapeRight);
}
屏幕旋转是:如果在info.plist文件中设置了几个方向,那么控制器只能在那几个方向旋转或者不旋转;但是没有开通的方向是一定不能在VC中用代码开通的。
19. 使用block会出由于层次过于复杂,导致不能拿到对应的VC。
解决办法:1. 用通知 2. 在创建下一层级的view时,view创建一个属性,这个属性用来指示上层级的VC。这样VC就保留倒了下一个层级。
20. navigationItem 中的UIBarButtonItem的image 要取消渲染才能显示。
点击图片,右边设置有render As ,选择 original image。
21. pickerView的reloadComponent刷新不了。原因是自己把代码写错了:
我写成了self.pickerView = picker; 由于picker是全局指针,应该写成:picker = self.pickerView;由于全局变量指针没有指向pickerView,所以导致,pickerView调用reloadComponent方法,不能刷新页面。
另外:reload这个方法,会优先调用ViewForRow,其次才是titleForRow。这两个方法只调用一个。
21. 只有在viewDidAppear这个方法里面,self.view的frame才是正确的。
22. 由于在viewWillAppear中没写super viewWillAppear 导致,这里面的方法调用失败。同理viewDidAppear也要调用super的方法。
23. 由于没有创建model,只是self.model来接数据是不对的。我们用惯了故事板连线形成的属性,不用alloc是因为在故事板中已经存在了。而model是NSObject,我们要先创建它,指针才有意义。否则为nil。
24. 解决scrollView上的按钮点击响应延迟的问题:
scrollview上添加button,会使得button响应延迟。解决办法:
self.scrollView.delaysContentTouches = NO;
25. 关于字典
下面2个方法只能由NSMutableDictionary 应用。
1. setValue:forKey:只接受NSString*类型的key
2. setValue:forKey:当value为nil时,将调用removeObjectForKey:
26. 如何设置颜色的RGB
[UIColor colorWithRed:(CGFloat)154/255 green:(CGFloat)205/255 blue:(CGFloat)50/255 alpha:0.8];
154/255 RGB值要除以255,并且是CGFloat型。
27. 描述文件路径
~/Library/MobileDevice/Provisioning Profiles
28. SB中的use standard value 和use Canvas Value
前者指默认距离。
后者指当前两条边的实际距离。