iOS 开发问与答(1-15)

iOS 开发问与答(FAQ)

1.集成SQLite.swift框架出错:“sqlite3.h not found”

由于Xcode编译SDK时,模块映射只能使用绝对路径而不能使用相对路径,所以Xcode.app的路径在module.modulemap中被写死了。在module.modulemap文件中,将Xcode.app安装路径改变成你的Xcode安装路径,比如:

/Applications/Xcode6.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/sqlite3.h

注意,这里使用的是Xcode6.4.app文件名,而不是默认的Xcode.app文件名。

Clean,重新编译。

2.如何新建一个故事板,并改变故事板中的创建的ViewController的默认大小为iPhone/iPad?

新建storyboard文件,打开File面板,去掉“Use Size Classes”选项,Xcode会问你是否保留iPhone/iPad的Size类,选择一个类别(iPhone或iPad),然后点击”Disable Size Classes”按钮。这样,故事板中的view的大小将使用选定设备的屏幕大小。

3.如何修改Statusbar的背景色

首先确保Info.plist中View controller-based status bar appearance一项为NO。
在viewcontroller中新加代码:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}

实现如下方法并在viewDidLoad方法中调用它:

func addStatusBarBgColor(color:UIColor){
    let view=UIView(frame: CGRectMake(0, 0,UIScreen.mainScreen().bounds.size.width, 20))
    view.backgroundColor=color
    self.view.insertSubview(view, atIndex: 0)
}

4.如何修改Toolbar的背景色

首先确保Toolbar的Trancent一项未勾上。
然后实现如下方法并在viewDidLoad方法中调用它:

func addToolbarBgColor(color:UIColor,toolbar:UIToolbar){
    let view=UIView(frame: toolbar.bounds)
    view.backgroundColor=color
    toolbar.insertSubview(view, atIndex: 0)
}

5.如何将Dictionary转换成SwiftyJSON中的JSON对象?

func dic2json(d:Dictionary<String,AnyObject>)->JSON?{
    var error:NSError?;
    if let data = NSJSONSerialization.dataWithJSONObject(d, options: NSJSONWritingOptions.PrettyPrinted, error: &error) {
        return JSON(data: data, options: NSJSONReadingOptions.MutableContainers, error: nil)
    }
    println("Object convert JSON error:\(error)")
    return nil
}

6.在故事板中,无法为UIButton创建IBAction连接

原因在于某个对UIButton的扩展中将IButton定义为

extension UIButton : DynamicTypeChangeHandler {

将其注释即可。

7.如何去除Toolbar上方的细线?

toobar.clipsToBounds = YES

细线即被清除

8.当使用setTitle:forState:方法改变按钮标题时,会有一个FadeInOut动画效果,导致文字闪烁?

将按钮设置为 UIButtonTypeCustom,可以消除闪烁。

9.移除字符串最后一个字符

if str.hasSuffix(",") {
    str.removeAtIndex(str.endIndex.predecessor())
}

10.有时候 NSLocalizedStringFromTable 不生效

假设你有一个 .strings 进行了本地化,但你发现 NSLocalizedStringFromTable 方法根本取不到任何本地字符串(甚至 en 字符串也取不到,只返回 key 值)。那么你可以 Clean 一下再编译。

如果在模拟器上测试,可以编辑 Scheme ,将 Run /option 下的 applicaton language和 application region 两项修改为中文/中国进行测试。

11.如何让 Xcode 加载 JPG 文件?

从 Xcode 6.1 开始,JPG 图像可以放进 asset catalog(资源目录) 中了。但是当你这样做的时候,图片却只会显示为空白,同时控制台报一个错误:
Could not load the “abc.png” image referenced from a nib in the bundle with identifier “xxx”。

将包含JPG文件的 Image Set 的 Render As 属性(在属性面板中)修改为 Original Image 即可。
注:编译过后,你又可以将 Render As 属性修改为 Default。但是当你 Clean 以后又不行了(必须重新改为 Original Image)。

12.怎样在一个 NSLayoutConstraint 上执行动画?

因为布局约束修改之后并不会导致立即重新计算自动布局。所以在动画块中修改NSLayoutConstraint不会导致UIView显示动画。
所以,当你修改完约束的constant之后,应该使用layoutIfNeeded()方法强制让布局引擎重新计算view的布局:

UIView.animateWithDuration(0.5, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { () -> Void in
        [self]
        self.locationTop.constant = self.locationIsShow ? -42 : -2
        self.view.layoutIfNeeded()
    }, completion: { (stop) -> Void in
        self.locationIsShow = !self.locationIsShow
    })

13.如何让工具栏的左按钮放在正确的位置?

默认工具栏(或导航栏)左按钮的位置会距离工具栏left约12px左右的位置。如果你想让左按钮从工具栏的 0,0位置开始,可以在左按钮前端插入一个 Fixed Space Bar Button Item,并将它的 width 设置为 0(如果要更靠左一些,可以将width设置为负值)

14.为什么多行文本框中的文本会从文本框下移一段位置开始?

如下图所示:

因为导航栏的原因,光标和文本默认会下移64个像素。解决办法,在viewDidLoad 方法中,加入代码:

if self.respondsToSelector("edgesForExtendedLayout"){// iOS 7+
    self.edgesForExtendedLayout=UIRectEdge.None
}

15.为什么 Scroll Direction 设置为 Horizontal 后 UICollectionViewCell 仍然会纵向排列(换行)?

如下图所示:

这是因为 Cell 的高度不足以占据屏幕的高度。在故事板中,将 UICollectionView 的 Cell Size 设置为一个比较高的高度,比如:225x400。效果如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值