iOS的自动布局问题

相关代码:

1
2
3
4
5
6
7
8
9
let deButton = UIButton(frame: CGRect(x: 0, y: 0 , width: 160, height: 100))
deButton.setTitle("TL", forState: .Normal)
deButton.backgroundColor = UIColor.greenColor()
self.view.addSubview(deButton)

deButton.snp_makeConstraints { (make) -> Void in
make.left.equalTo(self.view).offset(20)
make.top.equalTo(self.view).offset(70)
}

疑问:这段代码执行后,deButton的长和宽根据title的内容自动调节,而不是预先定义的160x100

原因:使用autolayout实现自动布局的时候,控件的frame设置将被忽略,所以要在自动布局的时候,把长宽也一同设置。

Undefined symbols for architecture armv7的处理

问题描述:

  1. 使用iphone6p真机调试,编译正常
  2. 换成iPhone5真机调试,编译出现一堆错误:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ld: warning: ld: warning: ignoring file /Users/lynn/Library/Developer/Xcode/DerivedData/Homecare-bcfxxolnwbuzthdgksefvehktwzf/Build/Products/Debug-iphoneos/libAFNetworking.a, file was built for archive which is not the architecture being linked (armv7): /Users/lynn/Library/Developer/Xcode/DerivedData/Homecare-bcfxxolnwbuzthdgksefvehktwzf/Build/Products/Debug-iphoneos/libAFNetworking.aignoring file /Users/lynn/Library/Developer/Xcode/DerivedData/Homecare-bcfxxolnwbuzthdgksefvehktwzf/Build/Products/Debug-iphoneos/libCocoaAsyncSocket.a, file was built for archive which is not the architecture being linked (armv7): /Users/lynn/Library/Developer/Xcode/DerivedData/Homecare-bcfxxolnwbuzthdgksefvehktwzf/Build/Products/Debug-iphoneos/libCocoaAsyncSocket.a
    ......
    Undefined symbols for architecture armv7:
    "_OBJC_CLASS_$_JTHorizontalCalendarView", referenced from:
    type metadata accessor for __ObjC.JTHorizontalCalendarView in CalendarViewController.o
    "_OBJC_CLASS_$_JTCalendarDayView", referenced from:
    ZTE.CalendarViewController.calendar (__ObjC.JTCalendarManager!, prepareDayView : __ObjC.UIView!) -> () in CalendarViewController.o
    ZTE.CalendarViewController.calendar (__ObjC.JTCalendarManager!, didTouchDayView : __ObjC.UIView!) -> () in CalendarViewController.o
    "_OBJC_CLASS_$_MGSwipeTableCell", referenced from:
    _OBJC_CLASS_$__TtC3ZTE15MessageItemView in MessageItemView.o
    "_OBJC_CLASS_$_QNZone", referenced from:
    type metadata accessor for __ObjC.QNZone in HCUploadManager.o
    "_OBJC_CLASS_$_QNConfiguration", referenced from:
    type metadata accessor for __ObjC.QNConfiguration in HCUploadManager.o
    "_OBJC_CLASS_$_MJRefreshHeader", referenced from:
    _OBJC_CLASS_$_HCRefresh in HCRefresh.o
    "_OBJC_METACLASS_$_MJRefreshHeader", referenced from:
    _OBJC_METACLASS_$_HCRefresh in HCRefresh.o
    "_OBJC_CLASS_$_AFNetworkReachabilityManager", referenced from:
    ......

问题分析:
从日志上看,出问题的都是实用cocoapods安装的第三方库;从日志看,应该是没有编译armv7对应的内容,修改pods工程的配置:
buildsettings->build active architecture only属性,debug->NO, release->NO

我这样改后,还是报同样的错误;折腾了好久,最后进入pods编译出的静态库存在的目录,把所有第三方静态库全删了,重编一下就好了。

升级vlc后,播放器的单击事件失效

vlc升级到v2.2.0以后,在modules/video_output/ios2.m文件中,添加了tapRecognized事件。所以在使用libvlc实现播放器的时候,应该注意规避改问题。
解决方案一:修改源码,把单击事件相关代码去掉,搜一下taprecognized相关的代码就行,主要是

1
2
3
4
5
6
7
if (sys->viewContainer.window) {
if (sys->viewContainer.window.rootViewController) {
if (sys->viewContainer.window.rootViewController.view)
[sys->viewContainer.superview addGestureRecognizer:sys->tapRecognizer];
}
}
sys->tapRecognizer.cancelsTouchesInView = NO;

解决方案二:不修改vlc的源码,在视频显示界面上再添加一层视图,接收单击事件

Swift开发点滴

Q:如何设置UIButton的高度和宽度?
A:可以通过设置边距实现,
self.contentEdgeInsets = EdgeInsets(top: 5, left: 8, bottom: 5, right: 8)

Swift学习笔记-本地化

1
2
3
按网上的教程实现的时候,开始的时候一直没成功,原因是文件名必须正确
1.app名称的本地化:InfoPlist.strings
2.其它词条的本地化:Localizable.strings

本地化处理的内容包括:
(1)应用程序名称
(2)出现在代码中的字符串
(3)本地化图片
(4)XIB文件
(5)其他文件

ios开发过程中的代码块

1.判断邮箱格式是否正确的代码:

// 利用正则表达式验证 -( BOOL )isValidateEmail:( NSString )email
{
NSString
emailRegex = @”[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}” ;
NSPredicate *emailTest = [ NSPredicate predicateWithFormat : @”SELF MATCHES%@” ,emailRegex];
return [emailTest evaluateWithObject :email];
}

,