iOS_面试遇到的问题

这篇博客汇总了iOS面试中常见的问题,包括UILabel的布局、UIView上的文字显示、数组的优缺点、集合求交策略、GCD的介绍、UITableView Cell优化、实时数据排序、1像素线绘制、KVC与KVO的底层实现、AFNetworking的内部实现、自动释放池的释放时机、图文混编的使用、__block在ARC和MRC下的差异、桥接转换的作用以及支付安全考虑。这些问题涵盖了iOS开发的多个方面,是面试准备的好资料。
摘要由CSDN通过智能技术生成

学习东西的方式有很多种, 面试也是一种车缺补漏的方式, 所以, 把遇到的问题总结一下, 感觉考底层实现的多一些:


1.lable 怎么从左上角开始显示内容?

答:

关于这个问题唐巧大神曾写过一篇帖子叙述的相当到位,大致有3种方式:

1.第一种也是比较简单的一种,通过修改label的高度来使文字看起来是从顶部开始显现的,即:

CGSize maximumSize = CGSizeMake(300, 9999);
NSString *dateString = @"The date today is January 1st, 1999";
UIFont *dateFont = [UIFont fontWithName:@"Helvetica" size:14];
CGSize dateStringSize = [dateString sizeWithFont:dateFont 
    constrainedToSize:maximumSize 
    lineBreakMode:self.dateLabel.lineBreakMode];
CGRect dateFrame = CGRectMake(10, 10, 300, dateStringSize.height);
self.dateLabel.frame = dateFrame;

如果你使用的是Masobry 的话那就更容易了, 只需设置距上以及距左的距离就可以了, label会根据文字进行自适应的, 当然, 如果需要这样的话需要你设置最大宽度

2.第二种方式是在文字后边加\n 讲文字挤要最上方,即:

for(int i=0; i<newLinesToPad; i++)
    self.text = [self.text stringByAppendingString:@"\n "];

3.第三种是利用category的方式对UILabel进行绘制,即:

// -- file: UILabel+VerticalAlign.h
#pragma mark VerticalAlign
@interface UILabel (VerticalAlign)
- (void)alignTop;
- (void)alignBottom;
@end

// -- file: UILabel+VerticalAlign.m
@implementation UILabel (VerticalAlign)
- (void)alignTop {
    CGSize fontSize = [self.text sizeWithFont:self.font];
    double finalHeight = fontSize.height * self.numberOfLines;
    double finalWidth = self.frame.size.width;    //expected width of label
    CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];
    int newLinesToPad = (finalHeight  - theStringSize.height) / fontSize.height;
    for(int i=0; i<newLinesToPad; i++)
        self.text = [self.text stringByAppendingString:@"\n "];
}

- (void)alignBottom {
    CGSize fontSize = [self.text sizeWithFont:self.font];
    double finalHeight = fontSize.height * self.numberOfLines;
    double finalWidth = self.frame.size.width;    //expected width of label
    CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];
    int newLinesToPad = (finalHeight  - theStringSize.height) / fontSize.height;
    for(int i=0; i<newLinesToPad; i++)
        self.text = [NSString stringWithFormat:@" \n%@",self.text];
}
@end


2.view 上怎么显示文字

答:查了一下, 好像CATextlaye能够实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值