gpt4 book ai didi

ios - Xcode 快速查看包装内容

转载 作者:技术小花猫 更新时间:2023-10-29 10:51:20 25 4
gpt4 key购买 nike

我是一名尝试使用 Xcode 的 Android 开发人员,但到目前为止我的表现并不尽如人意。我想要做的是拥有一个包含三个 subview 的自定义 View :

  • UIImageView(用于图标)
  • UILabel(用于标题)
  • UILabel(用于内容)

我希望内容标签的高度增长和收缩以包裹它包含的文本(如 Android 的 wrap_content)。然后,我希望自定义 View 也可以增长和收缩以包裹所有三个 subview 。

但是,我无法弄清楚这些自动布局/约束是如何工作的。

01) 我如何使 UILabel 的高度增大/缩小以匹配其包含的文本?

02) 我如何使我的自定义 View 的高度增大/缩小以匹配其包含的 subview ?

override func layoutSubviews() {
super.layoutSubviews()
img_icon = UIImageView()
txt_title = UILabel()
txt_content = UILabel()

img_icon.backgroundColor = Palette.white
img_icon.image = icon
txt_title.text = title
txt_title.textAlignment = .Center
txt_title.font = UIFont(name: "Roboto-Bold", size:14)
txt_title.textColor = Palette.txt_heading1
txt_content.text = content
txt_content.textAlignment = .Center
txt_content.font = UIFont(name: "Roboto-Regular", size:12)
txt_content.textColor = Palette.txt_dark
txt_content.numberOfLines = 0
txt_content.preferredMaxLayoutWidth = self.frame.width
txt_content.lineBreakMode = NSLineBreakMode.ByWordWrapping
self.backgroundColor = Palette.white
addSubview(img_icon)
addSubview(txt_title)
addSubview(txt_content)

/*snip img_icon and txt_title constraints*/

let txt_content_x = NSLayoutConstraint(item: txt_content, attribute: .CenterX, relatedBy: .Equal, toItem: self, attribute: .CenterX, multiplier: 1, constant: 0)
let txt_content_y = NSLayoutConstraint(item: txt_content, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1, constant: 80)
let txt_content_w = NSLayoutConstraint(item: txt_content, attribute: .Width, relatedBy: .Equal, toItem: self, attribute: .Width, multiplier: 1, constant: 0)
let txt_content_h = NSLayoutConstraint(item: txt_content, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40)
txt_content.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activateConstraints([
txt_content_x,
txt_content_y,
txt_content_w,
txt_content_h
])
}

我知道,在我试过的上面的代码中,我将高度设置为常量 40。这只是因为我不知道如何实现我想要的。

[编辑]

我已经尝试将高度限制设置为大于或等于,但它只会让 Xcode 崩溃。

[编辑]

如果我尝试查看它,它会使 Xcode 崩溃,但在模拟器中运行良好。现在的问题是,为什么

现在我的高度限制是:

let txt_content_h = NSLayoutConstraint(item: txt_content, attribute: .Height, relatedBy: .GreaterThanOrEqual, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40)

它在模拟器中工作并具有所需的行为。但是,如果我打开包含该 View 的 Storyboard,它就会崩溃。肯定是那行代码,因为将它改回 .Equal 可以解决崩溃问题。

[编辑]

我的临时修复是:

#if TARGET_INTERFACE_BUILDER
//use .Equal for height constraint
#else
//use .GreaterThanOrEqual for height constraint
#endif

这样,它不会使 Xcode 崩溃,并且仍会按照我想要的方式在模拟器上呈现。

[编辑]

我删除了预处理器检查,因为我意识到没有像定义的那样实际的东西,它现在仍然有效。我发誓我没有改变

接近于放弃 iOS 开发,因为当模拟器中一切正常时,界面构建器总是无缘无故地崩溃 Xcode。然后,我做了一些无用的编辑,它再次正常工作。

最佳答案

01) 我如何使我的 UILabel 的高度增长/收缩以匹配其包含的文本?

只需对标签父 View 设置顶部、左侧和右侧约束。将属性 number of lines 设置为 0。然后它将开始换行文本。

02) 如何使我的自定义 View 的高度增大/缩小以匹配其包含的 subview ?

通过使用界面构建器,这更容易实现。

我对您的建议是从 Storyboard 中的约束开始。您无需编译代码即可查看约束的结果。此外,您将直接在界面构建器中收到警告和错误。

如果您想使用编程约束,我的建议是开始使用它的框架。例如:https://github.com/SnapKit/SnapKit

关于ios - Xcode 快速查看包装内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35352401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com