小编Mar*_*k L的帖子

水平约束在UIScrollView中无法正常工作.(程序设计约束)

快速解释.

我有一个UIScrollView,这是"self.view"的子视图.我的UIScrollview,有一个叫做的子视图contentView

我的所有其他对象都是contentView或是它的子视图sub-views

除了2个视图外,我看起来一切正常.

一旦我在约束中添加这些视图.整个contentView向左移动,打破了一切.

这是一个带有麻烦视图的屏幕图像(howManyIconView),它是蓝色的UIView,中间有一个白色的松弛图标.(左下方)

为了让每个人都明白这是contentView搞砸了,我给了contentView一个红色背景.

在此输入图像描述

这是相同的视图,没有添加howManyIconView到我的约束.

在此输入图像描述

从与顶部开始到与问题相关的实际代码.

contentView.setTranslatesAutoresizingMaskIntoConstraints(false)
scrollView.addSubview(contentView)

howManyContentView.setTranslatesAutoresizingMaskIntoConstraints(false)
contentView.addSubview(howManyContentView)

howManyIconView.setTranslatesAutoresizingMaskIntoConstraints(false)
howManyIconView.backgroundColor = UIColor.formulaBlueColor()
howManyContentView.addSubview(howManyIconView)

howManyIcon.setTranslatesAutoresizingMaskIntoConstraints(false)
howManyIcon.textColor = UIColor.formulaWhiteColor()
howManyIcon.font = UIFont(name: "fontAwesome", size: 20)
howManyIcon.text = "?"
howManyIconView.addSubview(howManyIcon)
Run Code Online (Sandbox Code Playgroud)

这是限制因素:

    var viewsDictionary = ["contentView":contentView,"howManyContentView":howManyContentView,
            "howManyLabel":howManyLabel,
            "howManyInputField":howManyInputField,
            "howManyIconView":howManyIconView,
            "howManyIcon":howManyIcon]

    let metricsDictionary = ["topBarHeight":6,"numbersViewRowHeight":49,"numbersViewSeperatorHeight":1,"inputFieldHeight":75,"contentWidth":self.view.bounds.width,"grapViewHeight":175,"inputFieldWidth":100,"iconViewWidth":50]

            scrollView.addConstraints(
            NSLayoutConstraint.constraintsWithVisualFormat(
                "H:[contentView(contentWidth)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary))

        howManyContentView.addConstraints(
            NSLayoutConstraint.constraintsWithVisualFormat(
                "V:[howManyIconView(inputFieldHeight)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: …
Run Code Online (Sandbox Code Playgroud)

constraints uiscrollview ios swift

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

设置TouchID"输入密码"后退以开始编辑UITextField

我在我的应用程序中设置了touchID并正常工作.

但是,我想更改"输入密码"的功能.

在创建我的身份验证时,我遵循以下教程:http://www.appcoda.com/touch-id-api-ios8/

但是,他们使用alertView作为"输入密码"选项.

我想解雇touchID alertview并让我的passwordTextField成为第一个响应者.

当然我试过了:

self.passwordTextField.becomeFirstResponder()
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:

2015-04-09 10:48:42.309 Formula Stocks[3933:964941] *** Assertion failure in void _UIPerformResizeOfTextViewForTextContainer(NSLayoutManager *, UIView<NSTextContainerView> *, NSTextContainer *, NSUInteger)(), /SourceCache/UIFoundation/UIFoundation-371.13/UIFoundation/TextSystem/NSLayoutManager_Private.m:1547
2015-04-09 10:48:42.312 Formula Stocks[3933:964941] <NSXPCConnection: 0x1701061e0> connection to service named com.apple.CoreAuthentication.daemon: Warning: Exception caught during decoding of received reply to message 'evaluatePolicy:options:reply:', dropping incoming message and calling failure block.

Exception: Only run on the main thread!
Run Code Online (Sandbox Code Playgroud)

这是我的身份验证功能:

func requestFingerprintAuthentication() {
    // Get the local authentication context.
    let context = LAContext()

    // …
Run Code Online (Sandbox Code Playgroud)

ios touch-id swift

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

Swift - 以编程方式创建垂直UIScrollView

我一直在寻找一个(工作)教程的日子,甚至是一个使用UIScrollView垂直滚动的示例应用程序,这是编程的.有很多关于使用故事板的教程,让我感到茫然.

我查看了苹果的文档,他们的"指南"仍然没有一个坚实的例子或暗示从哪里开始.

我到目前为止所尝试的是做了以下一些事情.

让我的视图成为一个直接在课堂上的scrollview

let scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds)
Run Code Online (Sandbox Code Playgroud)

然后将其分配给我的viewDidLoad函数中的视图

self.view = scollView
Run Code Online (Sandbox Code Playgroud)

试图更改内容大小.

self.scrollView.contentSize = CGSize(width:2000, height: 5678)
Run Code Online (Sandbox Code Playgroud)

试图启用滚动

scrollView.scrollEnabled = true
Run Code Online (Sandbox Code Playgroud)

以编程方式执行此操作时我能找到的最后一个建议

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    scrollView.frame = view.bounds
}
Run Code Online (Sandbox Code Playgroud)

目前我没有尝试开始将我的对象添加到scrollview,(我不需要缩放,只需要进行垂直滚动),但我没有设法得到任何工作:(事实上,运行应用程序与那些添加只会导致UIProblems,屏幕向上移动奇怪,它不适合我的屏幕的整个宽度?我尝试修复使框架边界等于宽度,但仍然无法正常工作

我没有收到任何错误.

我很想看到一个可以垂直滚动的示例viewcontroller!或任何帮助将非常感谢!

编辑灾难的屏幕截图,尝试使我的视图可滚动导致.

http://i.stack.imgur.com/gQ0SC.png

(链接而不是图像,由于缺少直接放置图像的点.)

(我将滚动视图背景设置为红色,看看它是否显示正确.它似乎是.但我不能滚动到任何地方

正如评论中所建议的那样,我没有使用self.view = self.scrollview,而是尝试将scrollview添加为self.view的子视图,但没有取得积极的结果.

编辑2:

加入

scrollView.contentSize = CGSize(width:2000, height: 5678)
Run Code Online (Sandbox Code Playgroud)

to viewDidLayoutSubviews,如下面的评论中所建议的那样使我的视图可滚动!

然而,由于某种原因,我的布局仍然看起来像一个完全混乱(看起来它应该是,在我使它可滚动之前).

这是我的topBar(蓝色)的示例约束,它应该占据整个水平空间.

self.scrollView.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "H:|[topBar]|", options: nil, metrics: nil, views: viewsDictionary))
Run Code Online (Sandbox Code Playgroud)

任何想法为什么这不起作用?

uiscrollview ios swift

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

Swift 2.0迁移错误

我已经看过WWDC会议,阅读关于Swift的新程序员的书,并阅读我可以找到的Stack Overflow上的所有相关问题.从Swift 1.2迁移到Swift 2.0后,我修复了我的应用程序中的大多数错误.

然而,还有一些我无法解决的问题.

向下转向AnyObject

错误:

无法从'[AnyObject]'向下转换为更可选的类型'[NSManagedObject]'

码:

    let fetchRequest = NSFetchRequest(entityName: formulaEntity)

    var error: NSError?

    do {
        let fetchedResults = try managedContext.executeFetchRequest(fetchRequest) as! [NSManagedObject]?

        if let results = fetchedResults {
            stocks = results
        } else {
            print("Could not fetch \(error), \(error!.userInfo)")
        }
    } catch {
        print("ERROR: \(error)")
    }
Run Code Online (Sandbox Code Playgroud)

显示的错误发生在该let fetchedResults = try...行中

我遇到的另一个奇怪的错误是在我的AppDelegate中:

错误:

'NSMutableDictionary'不能转换为'[NSObject:AnyObject]'

码:

    lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = {
    // The persistent store coordinator for the application. This implementation creates and return a …
Run Code Online (Sandbox Code Playgroud)

ios swift swift2

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

Swift程序启动画面

是否可以以编程方式制作splashscreen/LaunchScreen?如果是这样怎么样?

我目前有一个launchscreen.xib文件.但我想将其转换为带代码的.swift文件.

但是,我无法找到任何关于如何以编程方式执行启动画面的方法.

splash-screen ios swift

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

Swift CoreData编辑/更新实体,只有一个实例

这个问题似乎已经被问了很多.但我找不到快速解决方案.

我有一个名为"用户"的实体,它应该只有一个.因此,它是第一次创建后.我需要编辑/更新它的值,而不是创建更多.

我确实在youtube上找到了一个视频.这是下面提供的尝试.但它不起作用.

这是我之前在viewController类中的代码 viewDidLoad()

// Core data setup
let context = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!
var newUser : User? = nil
var results = NSArray()

var hasAccount = Bool()
Run Code Online (Sandbox Code Playgroud)

这是我的代码 viewDidLoad()

的println(NEWUSER)

    // Core data fetching
    var request = NSFetchRequest(entityName: "User")
    request.returnsObjectsAsFaults = false
    results = context.executeFetchRequest(request, error: nil)!
    if results.count > 0 {
        hasAccount = true
        var res = results[0] as NSManagedObject
        println(res.valueForKeyPath("email")!)
    }
    else {
        println("No Account")
    }
Run Code Online (Sandbox Code Playgroud)

我使用上面的代码,来确定User实体中是否已存在某些内容(然后设置hasAccount为"true").但是,如果你碰巧知道更好的方法来做到这一点.非常感谢!

我打印出"newUser",希望我能打印出User对象.所以我可以检查if newUser != nil { do …

core-data ios swift

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

Swift UITableviewCell颜色改变

我正在努力UITableView改变每个第二个单元格的背景颜色以帮助查看数据.

为此,我尝试创建一个名为"cellAlteration"的简单变量,在加载数据之前将其设置为0(因此第一个单元格应始终为白色)

var cellAlteration: Int = 0
Run Code Online (Sandbox Code Playgroud)

然后在我设置我的单元格的地方我执行以下操作:

        // #BackgroundColor
    if cellAlteration == 0 {
        self.backgroundColor = UIColor.whiteColor()
        cellAlteration = 1
    } else {
        self.backgroundColor = UIColor.formulaWhiteColor()
        cellAlteration = 0
    }
Run Code Online (Sandbox Code Playgroud)

(我知道这应该改为BOOL数据类型而不是Int,但这似乎与我的问题无关)

这是结果的图像:

在此输入图像描述

你可以看到它没有正确交替.

当我一直试图测试它时,它看起来像是第一次正确UITableView加载的单元格(只加载并显示你可以看到的单元格) - 着色的问题似乎不会发生,直到我向下滚动的UITableView具有加载和显示新的细胞.

因为我的简单变量检查方法不起作用,在Swift中进行单元格交替的正确方法是什么?

任何帮助将不胜感激 :)!

uitableview ios swift

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

Swift清除JSON缓存?

我正在处理一些经常更新的API数据.

我最近发现,当服务器上的数据更新时,手机上的数据无法正常更新.

经过几个小时的尝试对此进行故障排除后,我终于尝试从手机中删除应用程序,然后重新安装.它确实有效.

经过一些进一步的测试后,我发现它打印出旧的JSON.

删除应用程序并重新安装后,它会成功打印出正确更新的JSON.

从那里我收集到,这可能是电话以某种方式缓存旧的JSON数据的问题.

那么如何在swift中清除这个缓存呢?或强迫它提出新的要求.

(我正在使用swiftyJson,虽然我不认为这与这个具体问题有任何关系)

我确实找到了另外一个这样的问题,但它已经很久了(2014年在Obj-C中)并且没有答案.

这是我获取数据的方式:

        var request = NSURLRequest(URL: formulaAPI!)
        var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)
        var formula = JSON(data: data!)

        // Loop through the api data.
        for (index: String, portfolio: JSON) in formula["portfolio"] {



            // Save the data into temporary variables
            tempStockName = portfolio["name"].stringValue
            tempTicker = portfolio["ticker"].stringValue
            tempPurchasePrice = portfolio["purchase_price"].floatValue.roundTo(2)
            tempWeight = portfolio["percentage_weight"].floatValue
            latestAPIPrice = portfolio["latest_price"].floatValue.roundTo(2)
            tempDaysHeld = portfolio["days_owned"].intValue

            // Continues on for quite a while, but the data in the above …
Run Code Online (Sandbox Code Playgroud)

json caching ios swift

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

Swift 2在tapgesture中无法识别的选择器

我最近开始将我的应用程序更新为Swift 2.0,但是我遇到了一个问题,在SO上有一百个不同的答案,其中没有一个似乎与我的问题有关.

(这在将应用程序更新到Swift 2.0之前有效),但我找不到任何更改手势识别器的更改?

这是我得到的完整错误:

[Stocks.Sid​​ePanelViewController proFormulaTapGesture]:无法识别的选择器发送到实例0x14f06ae00

由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [Stocks.Sid​​ePanelViewController proFormulaTapGesture]:无法识别的选择器发送到实例0x14f06ae00'

***第一掷调用堆栈:(0x1830904d0 0x197afff9c 0x1830971ec 0x183094188 0x182f9920c 0x188c3c58c 0x188899b50 0x18872d104 0x188c3bc30 0x1886ed28c 0x1886eb3ac 0x18872b088 0x18872a5ec 0x1886fb908 0x1886f9fac 0x183047d6c 0x183047800 0x183045500 0x182f75280 0x18e0ec0cc 0x188762df8 0x100158184 0x1983428b8)的libc ++ abi.dylib:与类型NSException的未捕获的异常终止

这是一个简单的点击手势.但它似乎不再认识选择器了.

这是我用来设置识别器的代码:

let proFormulaTap = UITapGestureRecognizer()

proFormulaTap.addTarget(self, action:"proFormulaTapGesture")
proFormulaView.addGestureRecognizer(proFormulaTap)
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试运行的功能:

func proFormulaTapGesture() throws {
        print("proFormulaTapGesture")
        selectView(proFormulaView)
        selectedMenuItem = 0
        Formula = 1
        menuTabBarController.selectedIndex = 0
        navigationController?.navigationBar.topItem!.title = "BASIC FORMULA"
        try (menuTabBarController.viewControllers as! [SuggestionsViewController])[0].loadSuggestions()
    }
Run Code Online (Sandbox Code Playgroud)

但是因为它从不在控制台中打印"proFormulaTapGesture".我绝对认为错误发生在函数之前.提示选择器的错误也提示.

显然,自更新到Swift 2.0以来,try/catch已被添加到函数中,但在tapGestureRecognizer的设置中没有任何改变.

我尝试删除"抛出"并尝试从该功能,但问题仍然存在.我也试过制作一个按钮而不是一个轻敲手势识别器.但我仍然得到相同的错误,暗示它可能是选择器(功能)的问题,而不是点击手势/按钮.但是我的应用程序中的所有其他按钮都可以正常工作?

我还尝试重命名选择器/功能和点击手势识别器.还是一样.

原始代码是用Swift编写的,而不是Obj-C.在Apple的代码转换到Swift 2.0期间添加了throws和try

任何有关为什么突然被打破的帮助将不胜感激.

谢谢!

swift ios9 swift2 xcode7-beta4

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