小编fun*_*len的帖子

Safari View Controller使用错误的状态栏颜色

我的应用程序使用深色导航栏颜色.因此我将状态栏颜色设置为白色(因此它具有很好的对比度).

带有白色状态栏的红色导航栏

我通过将barStyle设置为黑色(使状态栏变为白色)并将barTint设置为深红色来完成此操作.完美的工作.

我提出这样的一个SafariViewController:

func openWebsite(urlString: String) {
    if let url = NSURL(string: urlString) {
        let svc = SFSafariViewController(URL: url)
        svc.delegate = self
        self.presentViewController(svc, animated: true, completion: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,呈现的状态栏SafariViewController仍为白色.这是一个问题,因为SVC导航栏具有默认的白色透明iOS默认样式.所以状态栏基本上是不可见的.

safari视图控制器与白色状态栏颜色

我该如何解决这个问题?

colors statusbar uinavigationbar ios sfsafariviewcontroller

14
推荐指数
1
解决办法
2564
查看次数

如何在iOS 11中向集合视图大标题导航栏添加刷新控件?

根据Apple的说法,刷新控件应该是iOS 11中大标题导航栏的一部分.

当我在故事板中为UITableViewController启用刷新控件时,刷新控件是导航栏的一部分(在拉动刷新时).

使用大标题刷新控件

我不能在故事板中为所有其他视图(如UICollectionViewController)执行此操作.当我在代码中添加刷新控件作为子视图时,它不是导航栏的一部分:

refreshControl = UIRefreshControl()
collectionView?.addSubview(refreshControl)
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

看起来像这样

如何在我的自定义滚动视图(如UICollectionViewController)中添加刷新控件,以便在使用大标题时导航栏中显示刷新控件?

ios uirefreshcontrol pull-to-refresh ios11

13
推荐指数
1
解决办法
8659
查看次数

在哪个线程上执行Swift属性的didSet {}?

我在Swift中定义了一个属性,如:

var foo : String {
  didSet {
    doSomething()
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,每次我设置foo就像foo = "bar"didSet将被执行.

但是我无法找到正在执行的线程 didSet.

例如,在这种情况下会发生什么:

dispatch_async(some_queue, { () -> Void in
     self.foo = "bar"
})
Run Code Online (Sandbox Code Playgroud)

这将导致didSet代码被执行.将didSet继续运行some_queue或始终运行main_queue

multithreading closures swift

10
推荐指数
1
解决办法
1909
查看次数

AVPlayer不会触发playbackBufferEmpty,但也不会播放

我使用AVPlayer通过互联网播放音频直播.如果暂停时间超过1分钟,我喜欢恢复播放.

我打电话player.rate = 1.0来恢复.但是,如果流暂停> 1分钟,则不再播放.在这种情况下,我需要重新创建AVPlayerItem以使其再次工作.

我怎么能抓住这个案子,所以我知道播放没有恢复?

  • 我试过KVO player.rate.它保持不变1.0.玩家不玩!
  • 我试过KVO currentItem.playbackBufferEmpty.但是在这种情况下不会调用它.
  • currentItem.status没有切换到.Failed.它根本没有变化.

在这种情况下,AVPlayer似乎什么都不做.有任何想法吗?

我构建了一个Playground代码来演示这个问题:

import UIKit
import AVFoundation

// keep it running forever so it plays audio
import XCPlayground
XCPSetExecutionShouldContinueIndefinitely(true)

class AVPlayerTest {

    let player = AVPlayer()
    let streamurl = NSURL(string: "http://detektor.fm/stream/mp3/musik/")!

    func startTest() {
        let item = AVPlayerItem(URL: streamurl)
        player.replaceCurrentItemWithPlayerItem(item)
        player.play()

        // give it some start time to build a buffer
        NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: #selector(timerTickedToPause), userInfo: nil, repeats: false) …
Run Code Online (Sandbox Code Playgroud)

ios avplayer avplayeritem

7
推荐指数
1
解决办法
1762
查看次数

使用CallKit显示用于拨出VoIP呼叫的iOS本机呼叫UI

当我的VoIP应用程序收到CallKit的呼叫时,iOS会显示本机系统调用UI.

如何为传出呼叫显示此本地呼叫视图?

voip ios callkit

7
推荐指数
1
解决办法
4095
查看次数

在Ansible剧本中致电ssh-copy-id-如何处理密码提示?

我有两台服务器。我serverA与Ansible合作。serverB不通过Ansible管理。我希望serverA能够获得serverB通过复制ssh_pub_keyserverAserverB

这可以手动调用来完成ssh-copy-id user@serverBserverA

我想serverA自动启用Ansible 。

- name: Register ssh key at serverB
  command: ssh-copy-id -i /home/{{user}}/.ssh/id_rsa.pub -o StrictHostKeyChecking=no user@serverB
Run Code Online (Sandbox Code Playgroud)

打电话ssh-copy-id要求我输入user @ serverB的ssh密码,以便可以复制密钥。

我如何通过ansible做到这一点?我希望它在执行剧本时以交互方式询问user @ serverB密码。也可以选择将密码存储在ansible Vault中。那我仍然不知道如何避免交互式的密码调用ssh-copy-id

我还添加-o StrictHostKeyChecking=no了呼叫,因为这是另一种交互,通常在调用ssh-copy-id时需要用户交互。

ssh ansible ansible-playbook

6
推荐指数
2
解决办法
8558
查看次数

从后台唤醒时,AVPlayer audioSessionGotInterrupted通知

I use AVAudioPlayer to play audio. I have background audio enabled and the audio sessions are configured correctly.

I implemented the audioSessionGotInterrupted method to be informed if the audio session gets interrupted. This is my current code:

@objc private func audioSessionGotInterrupted(note: NSNotification) {

    guard let userInfo = note.userInfo,
        let typeValue = userInfo[AVAudioSessionInterruptionTypeKey] as? UInt,
        let type = AVAudioSessionInterruptionType(rawValue: typeValue) else {
            return
    }

    if type == .began {
        print("interrupted")
        // Interruption began, take appropriate actions
        player.pause()
        saveCurrentPlayerPosition()
    }
    else if …
Run Code Online (Sandbox Code Playgroud)

notifications ios avaudiosession avplayer

6
推荐指数
2
解决办法
607
查看次数

嵌入ContainerView时如何删除UITableView顶部插入?

我目前正在开发iPhone应用程序.我现在有一个UITableView的顶部间距插入问题.看这个截图:

应用运行. 看到空间?

表格视图单元格和按钮之间不应有空格.

我不知道如何解决这个问题.UITableView嵌入在ContainerView中,如下所示:

故事板视图控制器

我认为我的容器视图约束正确."顶部空间到章节"按钮设置为0.

容器视图约束

我试图在故事板中更改表视图控制器的一些设置.比如说Adjust Scroll View Insets.但是当我禁用它时它不会改变任何东西.

TableViewController设置

我还尝试直接在代码中设置TableView insets viewDidLoad():

tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)

然而,这也没有解决它.

有人可以帮忙吗?我不知道在哪里看.

iphone storyboard uitableview ios uicontainerview

4
推荐指数
2
解决办法
5118
查看次数

如何知道在 Parse Cloud Code afterSave 钩子中的值是否改变?

每当我的对象的单个键的值在解析云代码afterSave挂钩中发生变化时,我都想发送推送通知。

Parse.Cloud.afterSave("Channel", function(request) {  
    var channel = request.object
    // TODO: check if value of channel key "state" was changed
});
Run Code Online (Sandbox Code Playgroud)

如何检查密钥的值是否state已更新?

这是我可以从request对象中获得的所有数据:http : //parseplatform.org/Parse-SDK-JS/api/v1.11.0/Parse.Cloud.html#.TriggerRequest

该线程中建议的解决方案感觉不对:Parse Javascript API Cloud Code afterSave with access to beforeSave values

我知道我可以通过beforeSave钩子中的脏方法来做到这一点。但是,这对我不起作用。为什么?如果我确实向许多用户发送推送通知,这需要一些时间。接收推送通知的客户端开始从服务器请求更新的频道对象。然而,他们可能会收到旧版本的对象,因为只要beforeSave尚未完成发送所有推送,通道对象就不会持久保存在数据库中。

javascript after-save before-save parse-cloud-code parse-server

4
推荐指数
1
解决办法
1155
查看次数

Alamofire:af_setImageWithURL 和 ImageDownloader 共享相同的 AutoPurgingImageCache 吗?

我在项目中使用 AlamofireImage 来将图像设置为 UIImageView:

let imageView = UIImageView(frame: frame)
let URL = NSURL(string: "https://httpbin.org/image/png")!

imageView.af_setImageWithURL(URL)
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中的某个时刻,我需要直接获取图像,因为我想做一些其他事情,而不是将其设置为 UIImageView。AlamofireImage 提供了ImageDownloader此用例:

let downloader = ImageDownloader()
let URLRequest = NSURLRequest(URL: NSURL(string: "https://httpbin.org/image/jpeg")!)

downloader.downloadImage(URLRequest: URLRequest) { response in
    print(response.request)
    print(response.response)
    debugPrint(response.result)

    if let image = response.result.value {
        print(image)
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个案例有相同之处 AutoPurgingImageCache吗?

caching uiimageview ios swift alamofire

3
推荐指数
1
解决办法
1140
查看次数

af_setImageWithURL完成后如何将图像放入AutoPurgingImageCache?

imageView.af_setImageWithURL(URL)我想与AlamofireImageAutoPurgingImageCache一起使用。

如何通知我已af_setImageWithURL获取图像,以便将其放入缓存中?因为这是在后台完成的。

我更喜欢这样的东西:imageView.af_imageFromCache(URL)如果图像已经存在,则从缓存中设置图像,否则异步下载,然后设置图像并将其保存在缓存中。

caching image ios swift alamofire

1
推荐指数
1
解决办法
1750
查看次数