最近又学习了一些小知识点,继续整理。
1.autolayout并不能完全解决适配问题,通常是给一套iphone6的设计图,然后根据图上的标注进行约束的添加,当这些约束添加好后,在iphone5上可能不会适配的很好,此时需要进行微调,或者将约束拉进代码中,根据屏幕大小,在代码中重新设置约束。通常在viewDidLoad中直接修改从storyboard拉进来的约束,不需要再调用其他方法,但是在别的地方如果修改了约束,可能需要调用一些必要的方法(例如setNeedsLayout等方法)。这里了解的还不是很多,之后会再进行学习。如果有人能总结,非常感谢。
2.在使用了自动布局的视图中,如果在代码中又修改了视图的frame大小,在屏幕转换之后,这个frame会恢复成原来的样子。这里也是需要注意的地方。
3.如果使用了autolayout,那么在做动画的时候,操作frame,bounds,center等位置属性时,需要注意,因为动画是临时的,下次setNeedsupdateConstraint会全部失效,还有需要注意的地方是,如果在动画中改变了约束大小,一定要调用view.layoutIfNeeded()方法,一定要,一定要,一定要,重要的事情说三遍。
4.添加约束可以使用addContraint()方法,在ios8中也可以使用新的约束名称.active = true;
5.在添加约束后的控件的size inspector中,有两个选项,一个是Content Hugging Proprity一个是Content Compression Resistance Proprity,前者是抗拉伸优先级,后者表示抗压缩优先级。Hug值越高越难被拉伸,CompressionResistance值越高越难被压缩。可以根据这两个值来决定控件是否允许在某些条件下被压缩或拉伸。
6.在使用tabkeViewController时,可以直接在tableview.headerView上放一个头视图(例如搜索框),然后再在每个section上放置头视图。
7.在tableView中改变每个section的标题有两种方法。一种是直接调用- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section方法,然后根据section设置标题大小,这里可以使用富文本来调整字体属性。另外一种是- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 在此方法中设置UITableViewHeaderFooterView(
UITableViewHeaderFooterView *header = [tableViewdequeueReusableHeaderFooterViewWithIdentifier:@"UITableViewHeaderFooterView"];
),然后改变header的属性,例如header.textLabel.text = @"",该方法需要在viewDidLoad中注册[self.tableViewregisterClass:[UITableViewHeaderFooterViewclass]forHeaderFooterViewReuseIdentifier:@"UITableViewHeaderFooterView"];// self.tableView.sectionHeaderHeight = 60; 注释的方法中可以改变宽度,当然也可以在方法
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section中改变宽度。
8.sqlite中sqlite3_last_insert_rowid()方法可以获取插入的最后id,然后可以根据select * frome table where ROWID = 来获取最后的数据。
9.去除tableView中多余的分割线可以给tableView添加一个空白的footerView,也可以取消cell的分割线,然后在自己定义一个view来模拟cell的分割线,这时,在最后一行后的分割线也会消失。
10.在代码中使用自动约束时,一定要记住关闭控件的translatesAutoresizingMaskIntoConstraints属性,不然会报错的。
11.viewcontroller有一个definesPresentationContext的bool值属性,该值表示当前的视图控制器或其子类又提供了一个视图控制器时,当前视图控制器的视图是否被覆盖。例如UINavigatinController中的该值为YES,因为他提供了一个viewController。 当这个值设置为yes时,系统将会要求此试图控制器来控制视图(如弹出或者进入新视图)。如果为NO,则会寻找下一层,一直到根视图控制器。
12.header Search path 是用于include <>(例如framework或者.a库或者系统库,boost) User header search path 是用于include ""(工程目录下的头文件),当然如果设置Always Search User Paths 为yes, include< >对于user paths来说也会有效。