很多都是 tvOS 的紀錄,部分 macOS 和 iOS 的紀錄。有部分 Bug 我依然還沒找到妥善的解決辦法。

Text lineBreakMode 的修改不工作

Text(text)
   .textStyleCaption2(lineLimit: 2)
   .lineBreakMode(.byCharWrapping)
   .fixedSize(horizontal: false, vertical: true)
struct InternalLabelView: UIViewRepresentable {
        var text: String
        @Binding var dynamicHeight: CGFloat

        func makeUIView(context: Context) -> UILabel {
            let label = UILabel()
            label.numberOfLines = 2
            label.lineBreakMode = .byCharWrapping
            label.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
            label.font = .systemFont(ofSize: 20, weight: .regular)
            label.adjustsFontSizeToFitWidth = false

            return label
        }

        func updateUIView(_ uiView: UILabel, context: Context) {
            uiView.text = text

            DispatchQueue.main.async {
                dynamicHeight = uiView.sizeThatFits(CGSize(width: uiView.bounds.width, height: CGFloat.greatestFiniteMagnitude)).height
            }
        }
    }

Untitled

使用 SwiftUI 的 Text 實現方法,lineBreakMode 並沒有正確生效。

「focused + onChange + 更改其他地方的值」的無限 Loop 問題(焦點卡住的問題)

如果不使用 Delay Run 就會導致無限卡住在第一個焦點位置。

使用 Delay 就會循環在第一張圖和選中的焦點來回切換。

.focused($Focused)
.onChange(of: Focused) { newValue in
    if newValue {
	      print("...", item.recentTitle)
        DelayRun.task(delay: 0.6) {
            appStatus.MainViewBackgroundURL = backgroundImageURL?.description ?? ""
        }      
    }
}

螢幕錄製 2023-07-19 上午3.38.08.mov

解決辦法

不知道。最後使用 UIKit 方案解決。

func collectionView(_ collectionView: UICollectionView, didUpdateFocusIn context: UICollectionViewFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
    if let indexPath = context.nextFocusedIndexPath {
        RecentBackground.setMainBackground(byIndex: indexPath.row)
    }
}

AVPlayer Toolbar 跳焦點問題

Untitled

tvOS 16.4

tvOS 16.4

tvOS 16.1

tvOS 16.1

在 tvOS 16.4 下,如果你的按鈕是點擊後會變換 icon 的話,會產生焦點跳走。