Sự cố chuỗi nsattribution khi chuyển đổi html thành chuỗi được gán
Công thức này cho biết cách định dạng nội dung của SwiftUI 0 bằng HTML qua 0 trên bất kỳ phiên bản SwiftUI nàoKết quả cuối cùng trông như thế này Có hai giải pháp trong công thức này
Công thức cho tất cả các phiên bảnGiải pháp chưa hoàn thiện đầy đủ vì nó không hỗ trợ tất cả các thẻ HTML - nhưng nó luôn hoàn thành công việc Nó cũng không hỗ trợ các siêu liên kết ngay lập tức - để kiểm tra xem điều đó được thực hiện như thế nào, hãy sử dụng công thức Siêu liên kết trong SwiftUI Text. Sự khác biệt chính là công thức này chỉ hoạt động với chế độ xem Văn bản SwiftUI, đây có thể là một lợi thế lớn Trước tiên, chúng tôi sẽ kiểm tra giải pháp hiệu quả, giải pháp nào
Sau đó, chúng ta sẽ xem xét một số lần thử khác không thành công do sự cố SwiftUI nội bộ Giải pháp làm việcOK, vì vậy giải pháp làm việc là hai phần
Hiển thị NSAttributionString trong một văn bản Phần đầu tiên chia 0 thành các chuỗi con được phân bổ rõ ràng, tạo và tạo kiểu cho một 0 dựa trên các thuộc tính của nó. Sau đó, nó dựa trên phép nối 0 - thực tế là bạn có thể sử dụng toán tử 4 trên hai phiên bản 0 và SwiftUI sẽ kết hợp chúng thành một 0 mới, trong khi vẫn đảm bảo bố cục và kích thước________số 8Có một nhược điểm tiềm ẩn đối với điều này - toán tử 4 chỉ hoạt động trên 0 và chỉ một số công cụ sửa đổi chế độ xem của nó thực sự trả về 0 chứ không phải 00. e. g, cái này không hoạt động
Điều này có nghĩa là không phải tất cả các thuộc tính đều có thể được áp dụng cho một 0. e. g, thuộc tính 02 bị bỏ qua vì không có cách nào để phát hiện một lần nhấn vào 0 và vẫn trả về một 0. Tuy nhiên, nó bao gồm hầu như tất cả các định dạng từ một chuỗi được gán mà bạn thường cần. Đây là mã
Nếu bạn thử với các phiên bản 0 kết quả, bạn sẽ phát hiện ra rằng việc áp dụng công cụ sửa đổi chế độ xem 06 không hoạt động, tôi. e 0Mặt khác, các công cụ sửa đổi khác, chẳng hạn như 07, 08 hoặc 09 hoạt động như mong đợi. Đây có vẻ là sự không nhất quán nội bộ của SwiftUI, nhưng điều quan trọng cần lưu ý là phần tiếp theoHiển thị HTML trong văn bản Swift có thể dễ dàng chuyển đổi một chuỗi HTML thành một 0 và sau đó chúng ta có thể đưa 0 đó vào trình khởi tạo từ phần trước. Điều duy nhất còn lại để sắp xếp là làm thế nào để đặt phông chữ cho toàn bộ văn bản HTML. Để làm điều này, chúng tôi sẽ sử dụng một mẹo nhỏ - chúng tôi sẽ nhúng chuỗi có định dạng HTML vào khung tài liệu HTML và chỉ định kiểu dáng của nó thông qua CSS 1Và đó là nó. Bạn có thể thử giải pháp với mã này 2Giải pháp không hiệu quảGói UILabel trong UIViewRepftimeable Giải pháp này liên quan đến việc gói 12 trong 13 và sau đó gán chuỗi được gán cho thuộc tính 14 của nó. Một cái gì đó như thế này 6Vấn đề với phương pháp này là văn bản không chia thành nhiều dòng. Tôi đã sửa phần đó, nhưng chế độ xem vẫn không có kích thước phù hợp và có vấn đề về bố cục, đặc biệt là khi được gói trong 15. Tôi đã có thể giải quyết nó cho một trường hợp sử dụng cụ thể, nhưng không thể tìm ra giải pháp hoạt động trong bất kỳ bố cục nào, giống như giải pháp dựa trên 0Sử dụng FlowLayoutView Giải pháp này liên quan đến việc tạo chế độ xem tùy chỉnh cho mọi dải con chuỗi được phân bổ và sắp xếp chúng bằng Bố cục luồng. Bố cục Luồng sắp xếp thứ tự chế độ xem theo thứ tự trong một dòng và tự động xử lý ngắt dòng và ngắt dòng, vì vậy, đây có vẻ là ứng cử viên hoàn hảo. Ít nhất là cho đến khi SwiftUI quyết định can thiệp Vì bất kỳ lý do gì, 17 của SwiftUI gặp sự cố khi bạn lưu trữ một 0 trong một 19. Hãy xem xét ví dụ này 1Nếu chạy mẫu này, bạn sẽ gặp một loạt lỗi 17, dẫn đến sự cốTôi đã cố gắng giải quyết vấn đề này theo nhiều cách
Bây giờ, nếu bạn chuyển một chuỗi phân bổ được mã hóa cứng cho ứng dụng, nó sẽ không gặp sự cố. Tuy nhiên, nếu bạn định tính toán nó ở đâu đó trong mã (như chúng ta làm khi chuyển đổi chuỗi HTML) hoặc thậm chí đọc nó dưới dạng 26, thì nó sẽ gặp sự cố. Tôi nghi ngờ có một vấn đề sâu hơn đang hoạt động, đó cũng có thể là lý do tại sao Apple không cung cấp bất kỳ hỗ trợ SwiftUI gốc nào cho 0May mắn thay, giải pháp 0 luôn hoạt động đủ tốt, ít nhất là cho đến khi phiên bản tiếp theo của SwiftUI cung cấp cho chúng tôi sự hỗ trợ mà chúng tôi cần (EDIT. Sự hỗ trợ cuối cùng đã có ở đây trong SwiftUI 3. )Giải pháp SwiftUI 3SwiftUI 3 hỗ trợ chuỗi được phân bổ nguyên bản, cũng như hiển thị chúng trong những năm 0, dẫn đến đoạn mã sau
NSAttributionString là gì?Một đối tượng NSAttributionString quản lý các chuỗi ký tự và tập hợp các thuộc tính được liên kết (ví dụ: phông chữ và kerning) áp dụng cho từng ký tự hoặc phạm vi ký tự trong chuỗi. An association of characters and their attributes is called an attributed string.
Nsmutableattributionstring là gì?Một chuỗi có thể thay đổi với các thuộc tính được liên kết (chẳng hạn như kiểu trực quan, siêu liên kết hoặc dữ liệu trợ năng) cho các phần văn bản của nó . |