UILabel의 text에 넣은 기호가 이모티콘으로 바뀌는 것을 방지

6741 단어 iOSSwiftswift3

UILabel의 text에 특정의 기호를 넣으면 이모티콘화해 버린다



UILabel의 text에 ❤(하트)나 ☎(전화)등의 특정의 기호를 세트 해 표시하면, 이모티콘으로서 표시되어 버리는 일이 있습니다.
시험에 카드 놀이의 표시를 텍스트로 설정하면 ...
let label: UILabel = ...
label.text = "♠♣❤♦"



이렇게 이모티콘이 되어 버립니다.

이모티콘을 피하십시오.



단순히 기호로서 표시하고 싶은 경우는 이하와 같이, 기호 문자의 뒤에 \u{FE0E} 를 추가해 줍니다.
let label: UILabel = ...
// 1文字の場合
label.text = "♠\u{FE0E}"
// 複数ある場合はmapとか使うと楽かも
label.text = "♠♣❤♦".characters.map { "\($0)\u{FE0E}" }.joined(separator: "")

이제 이모티콘으로 변하지 않고 표시할 수 있습니다.



"\u{FE0E}"는 일체



기호 뒤에 붙은 \u{FE0E} 는, Variation Selector (이자체 셀렉터)라고 하는 것의 하나입니다.
어떤 문자가 텍스트 스타일, 이모티콘 스타일 모두가 될 수 있는 경우에 \u{FE0E} 를 부여해 주면(자) 텍스트 스타일로서 표시시킬 수가 있습니다.
반대로 이모티콘으로 표시하고 싶을 때는 \u{FE0F} 를 부여해 주면 이모티콘으로 표시시킬 수 있습니다.
let label: UILabel = ...
label.text = "Ⓜ\u{FE0E} → Ⓜ\u{FE0F}"



다만, 문자에 따라서는 부여하는 것으로 문자화할 가능성도 있으므로 주의가 필요합니다.

자세한 내용은 위키을 참조하십시오.



Playground에서 시도 할 수있는 코드를 준비했습니다. 1.5초 후에 이모티콘이 되어 버린 기호가 보통 기호로 돌아가게 되어 있습니다.
import PlaygroundSupport
import Foundation
import UIKit

PlaygroundPage.current.needsIndefiniteExecution = true
let view = UIView(frame: CGRect(x: 10, y: 10, width: 100, height: 50))
let label = UILabel(frame: .zero)
label.text = "♠♣❤♦"
label.backgroundColor = .white
label.sizeToFit()
view.addSubview(label)
PlaygroundPage.current.liveView = view

DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
    label.text = "♠♣❤♦".characters.map { "\($0)\u{FE0E}" }.joined(separator: "")
    label.sizeToFit()
}

좋은 웹페이지 즐겨찾기