小编Jer*_*kar的帖子

将layoutMargins添加到UIStackView中的一个元素

我想创建一个包含 3 个元素的垂直堆栈视图。我只想要第二个和最后一个元素之间有更多的空间。所以我考虑添加到最后一个元素:

mylastelement.layoutMargins = UIEdgeInsets(top:30, left:0,bottom:0, right:0)
Run Code Online (Sandbox Code Playgroud)

但布局边距没有应用在我的堆栈视图中。有没有什么简单的方法可以实现这一点(我想避免修改最后一个元素的内部高度)。

编辑:我只是尝试通过执行以下操作来增加框架内的第二个元素高度(+50):

my2ndElementLabel.sizeToFit()
my2ndElementLabel.frame = CGRect(x:my2ndElementLabel.frame.origin.x,y:lmy2ndElementLabel.frame.origin.y,
                                 width:my2ndElementLabel.frame.width, height:my2ndElementLabel.frame.height + 50)
Run Code Online (Sandbox Code Playgroud)

但没有效果。

EDIT2:我尝试向我的 UIStackView 添加随机视图,但该视图被忽略!在理解 UIKit 如何工作时可能错过了一些东西?...:

let v = UIView(frame:CGRect(x:0,y:0,width:100,height:400))
v.backgroundColor = .red
myStackView.addArrangedSubview(v)
//...
Run Code Online (Sandbox Code Playgroud)

swift uistackview layoutmargins

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

swift:守卫的捷径"让自己= ......"?

我正在处理来自JSON的数据,我必须将它们解析成一个快速的对象.我用这个代码:

struct MyGPSCoords {

    var latitude:Double
    var longitude:Double
    var accuracy:Int
    var datetime:NSDate

    init?(infobrutFromJson_:[String:String]?)
    {
        guard let infobrut = infobrutFromJson_ else {
            // first time the user sign up to the app, php server returns "null" in Json 
            return nil
        }

        guard
        let lat:Double = Double(infobrut["latitude"] ?? "nil"),
        let lng = Double(infobrut["longitude"] ?? "nil"),
        let acc = Int(infobrut["accuracy"] ?? "nil"),
        let dtm = NSDate(timeIntervalSince1970: Double(infobrut["time"] ?? "nil"))
        else {
            print("warning : unable to parse data from server. Returning nil");
            return nil …
Run Code Online (Sandbox Code Playgroud)

optional ios swift

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

uistackview 中排列的子视图内的动画“跳跃”

我有一个水平 UIStackView 包含几个排列的子视图。

当用户单击按钮时,我想删除一个已排列的子视图(我们称之为 A),但在此之前我想做一个快速动画。我想做我自己的动画,所以我不能只stackView.removeArrangedSubview制作默认基本动画的动画,而不是我想要的特殊动画。

在 A 中,我有另一个视图(我们称之为 B),它是使用自动布局的 centeredX 和 centeredY 。

当我将安排的子视图 A 的 A.widthAnchor.constant 设置为 0 时,其他视图arrangedsubviews逐渐取代它,子视图 B 在动画之前丢失其 CenterX 并向左移动。或者也许它不会失去centerX,但它是在一个小A上的centeredX(其宽度= 0,并从左侧开始),但A不应该立即将其宽度设置为0,而是在动画完成之后.. 。

我尽力解释清楚,但我知道这可能会令人困惑。这是显示问题的视频。A中的图像 (B) arrangedsubview(占据整个屏幕)在动画开始之前“跳”到左侧。

https://drive.google.com/open?id=1nTDRe5zirbuQi86WVBTuU-iDU8aq0lcw

这是我制作此动画的非常简单的代码:

   UIView.animate(withDuration:4,delay:0, options:.curveEaseInOut, animations : {

        self.c.constant = 0 // c is A.widthAnchor constraint
        self.stackView.layoutIfNeeded()

    },completion: { _ in
        // done
    })
Run Code Online (Sandbox Code Playgroud)

animation ios swift uistackview

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

当在枚举中找不到值时抛出异常而不是返回 nil

我有一个数组,是从服务器发送的 JSON 中解码的。我想在一行代码中检索节点的值并将其转换为枚举值。可能会发生几个错误:(1)节点不存在,(2)节点值不是字符串(我的枚举只有字符串原始值),或者(3)提供的字符串不适合枚举中的任何现有值。

目前,我对 Dictionary 进行了扩展,使我能够将 (1) 和 (2) 放在一行中用于枚举以外的其他内容,并且如果发生错误,则可以轻松传播错误:

struct MemberOptions : MyDecodable
{
    var name:String 
    var age:Int 
    var facebookAccount:FacebookAccount


    init(from array:[String:Any]) throws 
    {
        // throw exception if node name doesn't exist, is json<null> or if it's value is not castable to the providen parameter (raw types or more complex object implementing MyDecodable protocol)
        name = try array.getSafe("name", String.self)
        age = try array.getSafe("age", Int.self) 
        facebookAccount = try array.getSafe("fb", FacebookAccount.self) 

    }
   
}
Run Code Online (Sandbox Code Playgroud)

现在是棘手的部分:我想要 (3) 来表示枚举,也就是说,对于给定的枚举,如果提供的字符串原始值不是已知的枚举值,则在一行中传播错误。我看到如果原始字符串值不存在,枚举的默认 init 返回 nil 。我希望它抛出异常。

当然,我可以为所有枚举创建一个会引发异常的 …

generics enums swift

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

标签 统计

swift ×4

ios ×2

uistackview ×2

animation ×1

enums ×1

generics ×1

layoutmargins ×1

optional ×1