swift Text()在UIHostingController中未换行

8nuwlpux  于 8个月前  发布在  Swift
关注(0)|答案(1)|浏览(112)

我尝试将视图渲染为图像,但是,文本不会渲染为环绕,尽管在常规视图中显示为这种方式。我尝试了一个具有UISscreen边界的maxWidth的框架,这将不会使文本溢出,但它会压缩它,留下一行文本被“.”切断。
外观:

它生成的图像:

应包含的文本:

Text(data.postContent)
                        .font(.callout)
                        .multilineTextAlignment(.leading)
                        .padding(.horizontal) //, 15
                        .foregroundColor(Color(hex: 0x050505))

字符串
图像生成扩展:

extension View {
var asImage: UIImage {
    let controller = UIHostingController(rootView: self.edgesIgnoringSafeArea(.top))
    let view = controller.view
    let targetSize = controller.view.intrinsicContentSize
    print(targetSize)
    view?.bounds = CGRect(origin: CGPoint(x: 0, y: 0), size: targetSize)
    view?.backgroundColor = .clear

    let format = UIGraphicsImageRendererFormat()
    format.scale = 3
    let renderer = UIGraphicsImageRenderer(size: targetSize, format: format)
    return renderer.image { _ in
        view?.drawHierarchy(in: controller.view.bounds, afterScreenUpdates: true)
    }
}


}

4nkexdtk

4nkexdtk1#

而不是设置maxWidth,设置idealWidth为我工作。

let text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Pellentesque massa placerat duis ultricies lacus sed turpis tincidunt. Laoreet id donec ultrices tincidunt arcu non sodales neque. Aliquam ultrices sagittis orci a scelerisque purus semper eget. Augue ut lectus arcu bibendum at varius."

Text(text)
    .font(.callout)
    .multilineTextAlignment(.leading)
    .padding(.horizontal)
    .frame(idealWidth: 400)
    .foregroundStyle(.white)
    .asImage

字符串
产生了一个大小为400*167的图像。Playground预览:


的数据
我还尝试重新创建屏幕截图中显示的视图:

let view = VStack(alignment: .leading) {
    HStack(alignment: .top) {
        Image(systemName: "person.circle.fill").font(.largeTitle)
        VStack {
            Text("Name")
            Text("Now").font(.caption)
        }
        Spacer()
        Image(systemName: "ellipsis")
    }
    Divider()
    Text(text)
        .font(.callout)
        .multilineTextAlignment(.leading)
        .padding(.horizontal)
        .frame(idealWidth: 400)
}
.foregroundStyle(.white)

view.asImage


这产生了一个大小为400x219.5的图像。Playground预览:


相关问题