我在iOS 8专用应用程序中使用大小类,我有一个UITableViewCell具有灵活宽度的视图.其自动布局约束定义如下:

如您所见,其宽度取决于设备宽度/方向.
当我打印它的框架时,cellForRowAtIndexPath我看到(180.0,10.0,400.0,60.0)显示400宽度.但是当我在模拟器中测量视图时,它只有175宽,这是因为我的视图内容被截断(我在其中绘制了一些内容).
我怎么知道什么时候UITableViewCell的约束和子视图完全渲染渲染,以便我可以在我的视图中重绘东西?
更新
在cellForRowAtIndexPath我做以下操作来获取单元格:
let cell = tableView.dequeueReusableCellWithIdentifier("TimeTypeCell", forIndexPath: indexPath) as! TimeTypeCell
let customField = customFields[indexPath.row]
cell.fieldNameLabel.text = customField["name"] as? String
cell.fieldValueLabel.text = customField["total"] as? String
cell.graphData = customField["totalGraph"] as! [Double]
cell.fieldGraph.dataSource = cell.self
cell.fieldGraph.delegate = cell.self
cell.fieldGraph.reloadData() //This is where the redrawing happens
Run Code Online (Sandbox Code Playgroud) 它只是我,还是NotificationCenter在Swift 3中成了热点?:)
我有以下设置:
// Yonder.swift
extension Notification.Name {
static let preferenceNotification = Notification.Name("preferencesChanged")
}
// I fire the notification elsewhere, like this:
NotificationCenter.default.post(name: .preferenceNotification, object: nil)
Run Code Online (Sandbox Code Playgroud)
在我的第一个视图控制器中,这很好用:
// View Controller A <-- Success!
NotificationCenter.default.addObserver(self, selector: #selector(refreshData), name: .preferenceNotification, object: nil)
func refreshData() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是这个视图控制器:
//View Controller B <-- Crash :(
NotificationCenter.default.addObserver(self, selector: #selector(loadEntries(search:)), name: .preferenceNotification, object: nil)
func loadEntries(search:String?) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
...崩溃:
[NSConcreteNotification length]:发送到实例的无法识别的选择器
据我所知,我的观察者设置正确.知道我做错了什么吗?
nsnotifications nsnotificationcenter ios notificationcenter swift3
如果我像这样在Swift的Realm Cloud上创建匿名用户:
let credentials = SyncCredentials.anonymous()
SyncUser.logIn(with: credentials, server: Constants.authURL) { user, error in
//...
}
Run Code Online (Sandbox Code Playgroud)
用户用随机创建提供商ID喜欢21483490cead296c6bc09ee40254d366,而不是一个电子邮件地址。
当用户以后决定注册帐户时,是否可以将提供者ID更新为他们的电子邮件地址,并identity在SyncUser记录中保持相同?
如果没有,我该如何迁移他们的帐户?我是否必须手动将其所有数据迁移到他们的新用户帐户?
我对 SvelteKit 相当陌生,无法找出与插槽相关的问题。我正在尝试制作一个具有主控和详细信息窗格的应用程序布局,其中主控和详细信息的内容是根据路线确定的。
假设我有一个__layout.svelte这样的文件:
//-------------------------
// routes/__layout.svelte
//-------------------------
<main>
<slot name="master" />
<slot name="detail" />
</main>
Run Code Online (Sandbox Code Playgroud)
然后我有另一个像这样的页面(还有几个类似的路线页面):
//-------------------------
// routes/users.svelte
//-------------------------
<div slot="master">
Users master content...
</div>
<div slot="detail">
Users detail content...
</div>
Run Code Online (Sandbox Code Playgroud)
当我导航到时,http://localhost:3000/users我只是收到一条错误消息,提示我无法使用slot=""in users.svelte,因为它不在子组件内。
我这一切都错了吗?您将如何在 SvelteKit 中实现类似的应用程序布局?
我在我的视图控制器中嵌入了一个UIWebView,如下所示:

我有一个网络视图(_graphTotal)的插座,我可以test.html使用这个成功加载其中的内容:
[_graphTotal loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"]isDirectory:NO]]];
我现在正试图将数据传递到Web视图并且没有运气.我已经添加了<UIWebViewDelegate>以及我正在尝试的内容:
NSString *userName = [_graphTotal stringByEvaluatingJavaScriptFromString:@"testFunction()"];
NSLog(@"Web response: %@",userName);
Run Code Online (Sandbox Code Playgroud)
以下是test.html我项目中的内容:
<html>
<head></head>
<body>
Testing...
<script type="text/javascript">
function testFunction() {
alert("made it!");
return "hi!";
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我可以在我的webView中看到"Testing ...",但我没有看到警报,也没有看到"hi!" 串.
知道我做错了什么吗?
我正在使用 Markdown 语法的 Mac 应用程序中的富文本编辑器。我NSTextStorage过去常常在 Markdown 语法中观察匹配项,然后NSAttributedString像这样实时地将样式应用到:
在这一点上,我已经在这方面不知所措,但我很高兴能够取得进展。:)本教程非常有帮助。
作为下一步,我想在呈现 's 字符串时隐藏 Markdown 字符NSTextView。所以在上面的例子中,一旦最后一个星号被输入,我希望* *字符被隐藏,只是sample以粗体显示。
我正在使用NSLayoutManager委托,我可以看到匹配的字符串,但我不清楚如何使用该shouldGenerateGlyphs方法生成修改后的字形/属性。这是我到目前为止所拥有的:
func layoutManager(_: NSLayoutManager, shouldGenerateGlyphs _: UnsafePointer<CGGlyph>, properties _: UnsafePointer<NSLayoutManager.GlyphProperty>, characterIndexes _: UnsafePointer<Int>, font _: NSFont, forGlyphRange glyphRange: NSRange) -> Int {
let pattern = "(\\*\\w+(\\s\\w+)*\\*)" // Look for stuff like *this*
do {
let regex = try NSRegularExpression(pattern: pattern)
regex.enumerateMatches(in: textView.string, range: glyphRange) {
match, _, _ in …Run Code Online (Sandbox Code Playgroud) 我有一个UIButton位于a UIImage和a 顶部的导航栏UILabel.它在iOS 10中运行良好,但现在在iOS 11中它无法识别我的@IBAction插座中的任何水龙头.
我尝试将水龙头插座移动到条形按钮项目,但这也不起作用.将UIButton具有以下限制:
我确认它是在那里给它一个绿色背景,所以我知道它是可见的和可用的.
知道发生了什么事吗?
我在 Stack Overflow 上查看了一些有关使用 SwiftUI 进行拖放重新排序的问题,其中这个问题特别有帮助:SwiftUI | 使用 onDrag 和 onDrop 对单个 LazyGrid 中的项目重新排序?
我希望扩展此功能,将某些内容从 SwifUI 应用程序中的一个项目列表拖到另一个项目列表中。假设我有一个Task清单:
//TaskView.swift
ScrollView{
VStack{
ForEach(model.tasks, id: \.self){ task in
Text(task.name)
.onDrag{
NSItemProvider(object: String(task.id) as NSString)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
...我还有一个Project列表,我可以将其拖动Task到该列表上以将其移动到该项目:
//ProjectView.swift
ScrollView{
VStack{
ForEach(model.projects, id: \.self){ project in
Text(project.name)
.onDrop(of: [UTType.text], delegate: ProjectDropDelegate(project: project))
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在努力解决的部分是我ProjectDropDelegate试图确定几件事:
id以便我可以对其采取行动?(或者,理想情况下,我可以使用整个Task对象)我不知道如何让我NSItemProvider使用.onDrag字符串以外的任何东西,并且仍然可以使用我的 SwiftUI 拖/放功能。对于它的价值,我Task和Project对象是核心数据类。 …
我正在尝试提供我的 SvelteKit 应用程序生成的 PDF 文件,并允许用户从端点下载它。
我的项目结构如下所示:
---------------------
/src/routes/downloads
---------------------
[file].ts
ABC.pdf
XYZ.pdf
Run Code Online (Sandbox Code Playgroud)
我的[file].ts端点如下所示:
import fs from 'fs'
// ----- GET -----
export async function get({ params }){
//console.log(params.file) -> ABC
var pdf = fs.readFileSync('./src/routes/downloads/'+params.file+'.pdf')
return{
status:200,
headers: {
"Content-type" : "application/pdf",
"Content-Disposition": "attachment; filename="+params.file+".pdf"
},
body: pdf
}
}
Run Code Online (Sandbox Code Playgroud)
所以当我点击 时http://localhost:3000/downloads/ABC,名为 downloads 的 PDF 文件ABC.pdf。
但我的readFileSync道路不适用于生产。据我所知,没有/src/routes文件夹。
如何通过http://localhost:3000URL 提供我的文件?我尝试过的所有方法都会产生 a404并且找不到该文件。我也愿意采用不同的方式来处理这种情况。这只是我对如何在 SvelteKit 中执行此操作的最佳猜测。
〜我正在使用Node 10.9.0和npm 6.2.0〜
我正在运行以下应用程序,该应用程序使我能够一遍http又一遍地向同一站点发出请求https。
var fetch = require('node-fetch')
const express = require('express')
const app = express()
//-- HTTP --
app.get('/test-no-ssl', function(req, res){
fetch('http://jsonplaceholder.typicode.com/users')
.then(res => res.json())
.then(users => {
res.send(users)
}).catch(function(error) {
res.send(error)
})
})
//-- HTTPS --
app.get('/test-ssl', function(req, res){
fetch('https://jsonplaceholder.typicode.com/users')
.then(res => res.json())
.then(users => {
res.send(users)
}).catch(function(error) {
res.send(error)
})
})
app.listen(3003, () =>
console.log('Listening on port 3003...')
)
Run Code Online (Sandbox Code Playgroud)
两者在我的本地计算机上都可以正常工作,并返回Typicode提供的JSON响应。但是,当我将它们作为Node应用程序部署到Web主机(FastComet)上时,会得到以下结果:
HTTP- /test-no-ssl按预期返回JSON
HTTPS- /test-ssl返回以下错误:
{
"message" : "request to …Run Code Online (Sandbox Code Playgroud) ios ×3
svelte ×2
sveltekit ×2
swift ×2
autolayout ×1
express ×1
fs ×1
ios11 ×1
node-fetch ×1
node.js ×1
nstextview ×1
realm ×1
realm-cloud ×1
rest ×1
ssl ×1
swift3 ×1
swiftui ×1
textkit ×1
uitableview ×1
uiwebview ×1