小编Luk*_*ker的帖子

SwiftUI 框架中的自定义字体

我正在为 iOS 应用程序创建一个框架。它将包含一些标签、按钮、列表……全部作为 SwiftUI 视图,但采用特殊设计。在框架中,我添加了一个名为“ContentView”的 SwiftUI 视图,它的目的只是(视觉上)测试画布中的 UI 元素,稍后 ContentView 将被删除。我想为标签设计添加自定义字体,我知道该怎么做:

  1. 将 *.ttf 文件添加到项目中
  2. 调整 info.plist“应用程序提供的字体”
  3. 确保它列在“构建阶段”中(复制捆绑资源)
  4. 与 ".font(.custom("My-Font-Name", size: 34))" 一起使用

但自定义字体(我已经在其他项目(iOS 应用程序)中成功尝试过)未显示在我的 ContentView 中。没有编译错误或任何警告,可以构建框架并且 ContentView 在画布中很好地呈现。只是字体错误。

我尝试重新启动Xcode,删除并添加多次字体,但没有成功。所以这是我的问题:

  1. 是否可以在自定义框架中使用自定义字体?
  2. 由于自定义字体 (*.ttf) 是一种资产,因此是否应将其作为框架的一部分进行不同的对待?
  3. 如果是这样,除了上面提到的步骤 1 到 4 之外,还需要做什么吗?

谢谢你的帮助。

frameworks ios swiftui

7
推荐指数
2
解决办法
2007
查看次数

在iOS13中重新分配AVAudioPlayer实例会导致BAD_ACCESS运行时错误

大家好,很遗憾,我坚持了下来,最近三天尝试了很多事情之后,我必须在这里寻求帮助

我有一个应用程序,已经在AppStore中使用了很多年,并且运行时没有崩溃(最新部署目标是iOS 12.4)。我有一些用于在应用程序中的某些事件上播放声音的代码。

现在,我尝试升级适用于iOS 13的应用程序,并且在不更改与该“ playSound”事物相关的任何代码的情况下,在真实设备上进行测试,总是会遇到此运行时错误。在模拟器上不会发生。

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x48)显示错误信息

:在将该问题标记为“重复”之前,请考虑这与iOS13的发布有关,因为在未发生之前,代码只是“正常”的。

这是我的代码,也在gitHub上

我的ViewController中有一个属性,可以防止ARC取消分配我的AVAudioPlayer:

private var mySoundPlayer: AVAudioPlayer = AVAudioPlayer()
Run Code Online (Sandbox Code Playgroud)

我有一个例程,应该在其中执行“播放声音”(在分配 AVAudioPlayer的新实例时会发生此错误。resourceURL不是问题,RE-ASSIGNING是问题,我使用新实例对其进行了测试没有被分配,我没有崩溃。

// -------------------------------------------------
// MARK: Private Methods
// -------------------------------------------------

private func makeSoundEvent(_ soundEvent : SoundEvent) {

    guard Settings().getSound() == .soundON else { return }
    guard let urlToRessource : URL = soundEvent.getFileURLToSoundRessource() else { return }
    do {
        mySoundPlayer = try …
Run Code Online (Sandbox Code Playgroud)

exc-bad-access avaudioplayer ios swift

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

iOS12 中的 NSKeyedUnarchiver 更改 - 如何取消归档字符串数组

从 iOS 11.4 到 iOS12,Foundation 发生了一些变化。不幸的是我找不到关于这个主题的任何有用的文档。

在 iOS12 之前,我让这段代码可以完美地从某个文件路径读取带有字符串的数组:

if let myList : Array<String> = NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as? Array<String> {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

正如我发现的,iOS12 中有一些我应该使用的新方法,我尝试了这个(当然是在 do-catch-结构中,并且在获取数据对象之后):

let myList : Array<String> = try NSKeyedUnarchiver.unarchivedObject(ofClass: Array<String>, from: data)
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个但没有成功:

let myList : Array<String> = try NSKeyedUnarchiver.unarchivedObject(ofClass: Array<String>.self, from: data)
Run Code Online (Sandbox Code Playgroud)

有什么推荐吗?

arrays nskeyedunarchiver swift

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

SwiftUI:如何使 GridItem 推出以填充可用空间

我想创建一个4 行 24 个项目的网格,因此每行应该有 6 个项目。无论网格在什么设备上渲染,所有项目都应该大小相同,但填充整个可用空间。

我已经实现了行的灵活高度,但是 GridItems 不会在水平维度上推出,尽管它是一个形状,据说是推出的。在 LazyHGrid 中,它似乎不会被推出。

这是我的代码:

struct AllAchievementsView: View {
    
    var gridRows: Array<GridItem>  { [GridItem(), GridItem(), GridItem(), GridItem()] }

    var body: some View {
        
        ZStack {
            Color.black
            LazyHGrid(rows: gridRows) {
                ForEach(0..<24) { index in
                    RoundedRectangle(cornerRadius: 10).foregroundColor(.blue)
                }
            }.padding()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了 GridItem 大小调整的所有变体,我尝试使用 .infity 在我的矩形上添加框架,等等,但无法实现。我真的必须使用 GeometryReader 以编程方式进行数学计算吗?

我添加两张图像:一张显示此代码的结果,另一张显示我想要实现的内容。

代码的当前结果

预期的

grid layout swiftui lazyhgrid

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

CAGradientLayer导致子视图不可见

你好iOS和Swift的大师,

经过两个令人沮丧的日子,我拼命地决定在这里问.问题:

添加CAGradientLayer时,不显示子视图.

细节:

  • 我已经创建了一个方法来在UIView的扩展中添加CAGradientLayer
  • 我只是在任何视图上调用该方法,这本身就很有效
  • 但是如果我尝试在视图层次结构中使用此方法作为UIView(作为背景),遗憾的是所有子视图都不再可见,渐变似乎"过度"了所有子视图
  • 如果我没有在容器视图上调用"addGradient"方法,则所有子视图都会正确显示
  • 惊人的细节:虽然子视图不可见,但它们以某种方式存在并且"活跃"(例如"隐形"UIButton激发")
  • 我正在使用Autolayout

任何想法将不胜感激!提前致谢.

ios cagradientlayer swift

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

如何设置NSLayoutAnchor以生成纵横比为1:1的居中子视图

这听起来并不太难,但经过几个小时的尝试后,我无法得到合适的解决方案.

问题:我想设置约束(使用类NSLayoutAnchor)以获得以超视图为中心的子视图(colorImageView),纵横比为1:1并且总是处于有时具有宽度>高度的超视图中的最大尺寸或高度>宽度.

示例1:SuperViewSize = width:80,height = 100 - > subview应获得80的高度和宽度,并以(40/50)为中心

示例2:SuperviewSize = width:60,height = 50 - >子视图的高度和宽度应为50并且以(30/25)为中心

我不想/并且它没有解决问题/硬编码widthConstraint = min(superviewWidth,superviewHeight)因为在创建子视图的那一刻,超视图边界没有最终定义 - >所以我需要一个约束.

这是我到目前为止的尝试(仍然缺少在不同的超视图中最大可能设置高度和宽度的约束:

// CREATE CONSTRAINTS(center in SuperView)
colorImageView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
colorImageView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true

// CREATE CONSTRAINTS (ratio 1:1)
colorImageView.widthAnchor.constraint(equalTo: colorImageView.heightAnchor, multiplier: 1.0).isActive = true
Run Code Online (Sandbox Code Playgroud)

我真的很感激一个暗示,怎么做.提前致谢 :))

autolayout nslayoutanchor

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