我正在尝试使用NSTextContainer的excludePaths在UITextView中排除一个正方形,如下所示:
NSTextStorage* textStorage = [[NSTextStorage alloc] initWithAttributedString:attributedString];
NSLayoutManager *layoutManager = [NSLayoutManager new];
[textStorage addLayoutManager:layoutManager];
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:self.bounds.size];
UIBezierPath *rectanglePath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 250, 250)];
textContainer.exclusionPaths = @[rectanglePath];
[layoutManager addTextContainer:textContainer];
self.textView = [[UITextView alloc] initWithFrame:self.bounds textContainer:textContainer];
self.textView.editable = NO;
self.textView.scrollEnabled = NO;
[self addSubview:self.textView];
Run Code Online (Sandbox Code Playgroud)
这适用于iOS 7.0:
但是,在iOS 7.1中,这将导致lineFragmentRectForProposedRect:atIndex:writingDirection:remainingRect:NSTextContainer 中的某个无限循环,使用99%的CPU并像疯狂一样泄漏内存.该应用程序完全没有响应,最终因内存使用而终止.显然这是iOS 7.1中的一个错误.
当我将排除矩形的x原点改变一个点(原点为{1,0})时,它可以工作,但看起来很糟糕:
只有当第一行的第一个字符受排除rect影响时,才会出现这个错误.当我将排除矩形更改为{0,30}时,它也会起作用:
但显然这不是我想要的.有谁知道如何解决这个bug?
我有一个有两个子视图的视图:
滚动视图位于子视图A的顶部,并具有完整的设备宽度/高度.我希望用户能够通过透明区域与滚动视图下方的所有按钮和手势重新配置器进行交互,同时仍然能够滚动(因此传递最小的测试结果).
看起来像一个足够简单的任务,但我无法让它工作.滚动视图始终阻止所有触摸.
知道如何实现这一目标吗?谢谢!
我写了一个Cordova插件来下载文件并将其保存在数据文件夹中.除了返回值之外,一切正常.我想显示一个进度条,需要获取当前进度.这是我的代码中的相关部分:
while ((readed = is.read(buffer)) > 0) {
fos.write(buffer, 0, readed);
totalReaded += readed;
int newProgress = (int) (totalReaded*100/fileSize);
if (newProgress != progress) {
progress = newProgress;
PluginResult res = new PluginResult(PluginResult.Status.OK, progress);
res.setKeepCallback(true);
callbackContext.sendPluginResult(res);
}
}
Run Code Online (Sandbox Code Playgroud)
我的JavaScript:
downloader.prototype.writeFile = function (downloaderSuccess, downloaderFailure, options) {
cordova.exec(downloaderSuccess, downloaderFailure, "downloader", "writeFile", options);
};
function downloaderSuccess(progress) {
WL.Logger.debug("Result: "+progress)
}
function downloaderFailure(error) {
WL.Logger.error("Error: "+error);
}
Run Code Online (Sandbox Code Playgroud)
发生的情况是只有在下载文件后才会输出进度.如果我将PluginResult.Status设置为NO_RESULT,它将不会输出任何内容.
我正在开发一个Worklight项目,它下载一个zip文件,解压缩它,并将文件存储在平台的特定文档目录中(在NSDocumentDirectory我正在使用的Android上的iOS中getFilesDir()).该文件由一个HTML文件和几个图像组成,位于子目录(媒体)中.下载和解压缩在两个平台上都可以正常工作.在解压缩过程之后,我将HTML文件的内容加载到现有div中(因为这是一个Worklight应用程序,所有内容都在一个HTML文件中).
这里事情变得复杂:我下载的HTML文件中的图像标记源是相对于HTML文件的(例如'media/myimage.jpg').当我将HTML文件注入Worklight HTML文件(位于App包/包中)时,基本URL会发生变化,并且无法在任何地方找到图像.我通过编写本机函数来修复此问题,这些函数重写下载的HTML文件中的所有图像标记以指向绝对URL(iOS:/var/mobile/Applications/<identifier>/Documents/,Android :) /data/data/<id>/files/.这适用于iOS,但在Android上它会导致HTML仅部分加载.然后LogCat显示:
Unknown chromium error: -6
Run Code Online (Sandbox Code Playgroud)
如果我按原样保存文件,HTML会正确加载,但很明显会出现损坏的图像.我还尝试将URL更改为file:///data/data/<id>/files/ [...],这也导致HTML无法完全加载.我真的不知道是什么导致了这个问题.该应用已获得WRITE_EXTERNAL_STORAGE许可.
有谁知道如何解决这个问题?谢谢!