iOS开发百问(11)

黄舟
黄舟 原创
2023-03-05 06:56:01 906浏览

131、如何限制ScrollView在某个方向上不可滚动?
例如,要限制x方向上不可滚动,可以实现UIScrollViewDelegate协议方法:

func scrollViewDidScroll(scrollView: UIScrollView) {
ifabs(scrollView.contentOffset.x) > 0 {
scrollView.contentOffset= CGPointMake(0, scrollView.contentOffset.y)
}
}

132、如何在Swift Framework目标中导入O-C框架
以BmobSDK 为例(CommonCrypto等C/O-C框架也是一样的),当你将BmobSDK添加到Link Binary With Libraries中时,当你使用“importBmobSDK”语句时,出现错误:no such module
如果你试图使用bridging headers导入BmobSDK,则会导致另一个错误。
这是由于Swift Framework不支持bridging headers文件。
解决这个问题,需要经过以下步骤:
1) 在项目目录中创建BmobSDK目录,将BmobSDK.framework放到这个目录。同时在这个目录下创建一个module.map文件,内容如下:

module BmobSDK [system] {
header"/Users/kmyhy/Documents/Swift/code/第12章/kNote/BmobSDK/BmobSDK.framework/Headers/Bmob.h"
link "BmobSDK"
export *
}

这将允许我们将BmobSDK当做Swift module来使用。
2) 在Build Settings中,找到Import Paths(SWIFT_INCLUDE_PATHS),增加BmobSDK目录。如下图所示:

3)在swift文件中导入BmobSDK框架:
import BmobSDK

133、如何在App Extension中使用CocoaPods
在 Podfile中加入此句:
link_with '扩展的名字'
添加bridging header文件,并设置Objective-C BridgingHeader。
134、错误'xxx.pch' has been modified since the precompiled header was builterror in Xcode
执行深度Clean(快捷键Option+Command+Shift+K)

135、Document Provider扩展中,DocumentPickerViewController的documentStorageURL属性返回为nil。
确认容器App,Document Provider扩展和File Provider扩展的App Groups设置正确,如果有任何惊叹号,请Fixed。
136、插入和删除CollectionView中的Cell
跟TableView一样,我们可以用insertItemsAtIndexPaths()/deleteItemsAtIndexPaths()插入/删除单元格。不同的是CollecionView不再支持beginUpdates()/endUpdates()操作。默认已支持插入/删除动画,如果不想要默认动画效果,可以设置UIView的animationsEnabled属性:

BOOL animationsEnabled = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
[myCollectionView reloadItemsAtIndexPaths:myIndexPaths];
[UIView setAnimationsEnabled:animationsEnabled];

137、UIScrollView中的UICollectionView不会滚动
检查UIScrollView是否被设置了delegate属性,同时检查在delegate中是否实现了scrollViewDidScroll方法。如果是,请删除该方法(仅仅取消delegate属性是不行的)。
同时检查UICollectionView的宽度(或宽度约束)、高度(或高度约束),以及列表内容大小,因为当列表内容小于UICollectionView的宽(或高)时,该方向的滚动条不会出现。
138、单元格使用UITableViewCellStyleValue1,为什么显示不正确?
UITableViewCell 有几个内置的类型,如UITableViewCellStyleDefault、UITableViewCellStyleValue1、UITableViewCellStyleValue2。
这些Cell都是SDK预先配置的,它们呈现固定的内置样式,比如字体大小、颜色、对齐方式等。如果你在想修改这些配置,很可能显示不正常,比如有的文本一下子能显示,一下子又不显示,或者一下子显示固有字体(及颜色),一下子(比如说点击单元格)又显示修改后的字体(及颜色)。
在这种情况下,你最好定制自己的单元格(子类化)。
139、boundingRectWithSize 计算出的尺寸不正确?
注意提供正确的options参数。对于UILabel,至少需要使用UsesLineFragmentOrigin和UsesFontLeading两个选项:

CGRect paragraphRect =
[attributedTextboundingRectWithSize:CGSizeMake(300.f, CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
context:nil];

140、Swift中无法对多个枚举值进行按位或(|)运算
注意,这个问题在 iOS 8.3 SDK Beta 1 (12F5027d)中已解决。对于低于此版本的SDK,我们可以用以下代码代替:

let options =unsafeBitCast(NSStringDrawingOptions.UsesLineFragmentOrigin.rawValue |
NSStringDrawingOptions.UsesFontLeading.rawValue,
NSStringDrawingOptions.self)
let frame = text.boundingRectWithSize(size, options:options, attributes:D,context:nil)

以上就是iOS开发百问(11)的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!


声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。