การจัดแนวแนวตั้งแบบอักษรที่กำหนดเอง UIButton


118

ฉันมีUIButtonที่ใช้แบบอักษรที่กำหนดเองซึ่งตั้งค่าเมื่อมุมมองของฉันโหลด:

- (void)viewDidLoad
{
    [super viewDidLoad];    
    self.searchButton.titleLabel.font = [UIFont fontWithName: @"FONTNAME" size: 15.0 ];
}

ปัญหาที่ฉันพบคือฟอนต์ดูเหมือนจะลอยขึ้นจากเส้นกึ่งกลาง หากฉันแสดงความคิดเห็นในบรรทัดนี้แบบอักษรเริ่มต้นจะปรากฏอยู่ตรงกลางในแนวตั้ง แต่การเปลี่ยนเป็นแบบอักษรที่กำหนดเองจะทำให้การจัดแนวในแนวตั้งแตก

ฉันได้รับปัญหาเดียวกันในเซลล์ตารางที่มีแบบอักษรที่กำหนดเองด้วย

ฉันจำเป็นต้องบอกมุมมองบางส่วนหรือไม่ว่าแบบอักษรที่กำหนดเองนั้นไม่สูงเท่าฟอนต์อื่น ๆ

แก้ไข: ฉันเพิ่งรู้ว่าแบบอักษรที่ฉันใช้เป็น Windows TrueType Font ฉันสามารถใช้ได้ดีใน TextEdit บน Mac มีเพียงปัญหาเกี่ยวกับการจัดตำแหน่งในแอพของฉัน

ข้อความของปุ่มไม่อยู่ตรงกลางในแนวตั้ง


ฉันมีปัญหาเดียวกันกับแบบอักษรนี้ (.otf ไม่ใช่. ttf): fontquirrel.com/fonts/bebas-neue
Neal Ehardt

คำตอบ:


312

ปัญหาเดียวกันนี้ถูกกล่าวถึงในที่กำหนดเองติดตั้งตัวอักษรแสดงไม่ถูกต้องใน UILabel ไม่มีวิธีแก้ปัญหาใด ๆ

นี่คือวิธีแก้ปัญหาที่ใช้ได้กับแบบอักษรที่กำหนดเองของฉันซึ่งมีปัญหาเดียวกันใน UILabel, UIButton และอื่น ๆ ปัญหาเกี่ยวกับฟอนต์กลายเป็นความจริงที่ว่าคุณสมบัติการขึ้นลงของมันมีขนาดเล็กเกินไปเมื่อเทียบกับค่าของฟอนต์ระบบ Ascender คือช่องว่างแนวตั้งเหนืออักขระของแบบอักษร ในการแก้ไขแบบอักษรของคุณคุณจะต้องดาวน์โหลดยูทิลิตี้บรรทัดคำสั่งของApple Font Tool Suite จากนั้นใช้แบบอักษรของคุณและทำสิ่งต่อไปนี้:

~$ ftxdumperfuser -t hhea -A d Bold.ttf

Bold.hhea.xmlนี้จะสร้าง เปิดด้วยโปรแกรมแก้ไขข้อความและเพิ่มมูลค่าของascenderแอตทริบิวต์ คุณจะต้องทดลองเล็กน้อยเพื่อหาค่าที่เหมาะสมที่สุดสำหรับคุณ ในกรณีของฉันฉันเปลี่ยนจาก 750 เป็น 1200 จากนั้นเรียกใช้ยูทิลิตี้อีกครั้งโดยใช้บรรทัดคำสั่งต่อไปนี้เพื่อรวมการเปลี่ยนแปลงของคุณกลับเข้าไปในไฟล์ ttf:

~$ ftxdumperfuser -t hhea -A f Bold.ttf

จากนั้นใช้แบบอักษร ttf ที่เป็นผลลัพธ์ในแอปของคุณ

OS X El Capitan

โปรแกรมติดตั้ง Apple Font Tool Suite ไม่ทำงานอีกต่อไปบน OSX El Capitan เนื่องจากSIPเนื่องจากพยายามติดตั้งไฟล์ไบนารีลงในไดเรกทอรีที่มีการป้องกัน ftxdumperfuserคุณต้องสารสกัดด้วยตนเอง ก่อนอื่นให้คัดลอก pkg จาก dmg ไปยังโลคัลไดเร็กทอรีหลังจากนั้นแกะไฟล์OS X Font Tools.pkgด้วย

~$ xar -xf OS\ X\ Font\ Tools.pkg

ตอนนี้ไปที่โฟลเดอร์fontTools.pkgด้วย

~$ cd fontTools.pkg/

แยกข้อมูลด้วย

~$ cat Payload | gunzip -dc | cpio -i

ตอนนี้ftxdumperfuserไบนารีอยู่ในโฟลเดอร์ปัจจุบันของคุณ คุณสามารถย้ายไป/usr/local/bin/เพื่อใช้ในทุกโฟลเดอร์ภายในแอปพลิเคชันเทอร์มินัลดังต่อไปนี้

~$ mv ftxdumperfuser /usr/local/bin/

4
+1 เคล็ดลับดีๆ! นี่คือข้อมูลบางส่วนเกี่ยวกับ Ascenders และ Descenders typophile.com/node/13081
tidwall

35
ทำงานได้ดีพอ ๆ กันสำหรับไฟล์ OTF
mharper

2
หากคุณใช้แบบอักษรที่กำหนดเองที่แก้ไขด้วยโซลูชันนี้และคุณตั้งค่าข้อความเช่นใน UITextView ที่มีหลายบรรทัดระยะห่างระหว่างบรรทัดจะใหญ่เกินไป
เพื่อน

5
ฉันพบว่าใน iOS 7 เบต้า 6 พวกเขาได้แก้ไขปัญหาการจัดตำแหน่งแบบอักษรแล้ว ดังนั้นหากคุณทำการแก้ไขนี้มันจะดีใน iOS 6 แต่เสียใน iOS 7 .... 7 ยังอยู่ในช่วงเบต้าดังนั้นใครจะรู้
tybro0103

3
เครื่องมือแบบอักษรได้รับการอัปเดตสำหรับ Xcode 9 พวกเขาติดตั้งได้ดีบน High Sierra ลิงก์โดยตรง: developer.apple.com/download/more/?=font
AndrésPizáBückmann

49

ฉันแก้ปัญหาในการปรับเนื้อหาด้านบน (ไม่ใช่ชื่อเรื่อง!)

ตัวอย่างเช่น button.contentEdgeInsets = UIEdgeInsetsMake (10.0, 0.0, 0.0, 0.0);

โชคดี!


15
นี่เป็นวิธีแก้ไขด่วนที่ดีสำหรับฉันซึ่งดูเหมือนง่ายกว่าการพยายามแก้ไขแบบอักษร myButton.titleLabel.font = [UIFont fontWithName: @ ขนาด "FontName": 20.0]; myButton.contentEdgeInsets = UIEdgeInsetsMake (3.0, 0.0, 0.0, 0.0);
Jamie Hamick

ยอดเยี่ยม! ขอบคุณ! ปัญหาของฉันแตกต่างกันเล็กน้อยฉันมีปุ่ม + และ - ที่เรียบง่ายโดยใช้แบบอักษรเริ่มต้นและพวกมันปรากฏต่ำกว่ากึ่งกลางฉันสามารถใช้วิธีแก้ปัญหาที่นี่เพื่อยกข้อความขึ้นเล็กน้อยเพื่อไม่ให้คลาดเคลื่อน
Patrick T Nelson

7

ไม่แน่ใจว่าวิธีนี้จะช่วยได้หรือไม่เพราะอาจขึ้นอยู่กับฟอนต์ของคุณ แต่อาจเป็นไปได้ว่าเส้นฐานของคุณไม่ตรงแนว

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;

3
ใช้งานได้ดีกับ titleLabel สำหรับ UIButton เมื่อมีการปรับขนาดตัวอักษรด้วย MinimumScaleFactor
smitt04

6

ผมคิดว่านี่คือคำตอบที่ดีที่สุด ไม่มีการเล่นกับ ascender, numberOfHMetrics ฯลฯ ... เพียงแค่นำเข้า - ส่งออกโดยแอปพลิเคชันGlyphsและงานที่ทำ ขอบคุณสำหรับคำตอบนี้: https://stackoverflow.com/a/16798036/1207684


คุณได้บันทึกวันของฉันแล้ว!
Aleš Oskar Kocur

ของฉันด้วย! ขอบคุณครับ.
Juan Sagasti

2

คุณสามารถลองใช้งานได้ในตัวสร้างอินเทอร์เฟซ นี่คือภาพรวมของวิธีการทำ -

ใส่คำอธิบายภาพที่นี่ ใส่คำอธิบายภาพที่นี่

ดังที่คุณเห็นการพยายามทำสิ่งนี้ใน IB มีประโยชน์ในตัวเอง


1
การตั้งค่านั้นมีอยู่แล้วและใน IB แบบอักษรจะแสดงในแนวตั้ง แต่จะแสดงเป็นแบบอักษรเริ่มต้น เฉพาะเมื่อฉันเรียกใช้แอปของฉันที่ใบหน้าแบบอักษรที่กำหนดเองของฉันจะปรากฏขึ้นและไม่ได้อยู่กึ่งกลางในแนวตั้ง
Pete

คุณตั้ง "แบบอักษรที่กำหนดเอง" ใน IB หรือไม่ รองรับแบบอักษร iOS หรือไม่
Srikar Appalaraju

แบบอักษรถูกตั้งค่าเป็น IB และตามรหัสที่ระบุในโพสต์ต้นฉบับของฉัน มันไม่ปรากฏในการจำลองหน้าจอ IB แม้ว่าจะเลือกแบบอักษรแบบเลื่อนลงใน IB ก็ตาม
พีท

2

สายไปงานเลี้ยง แต่เป็นปัญหานี้ตีฉันเป็นครั้งชับฉันคิดว่าฉันต้องการโพสต์วิธีที่ง่ายที่สุดที่ฉันได้พบ: การใช้หลาม FontTools

  1. ติดตั้ง Python 3 หากไม่มีในระบบของคุณ

  2. ติดตั้ง FontTools

    pip3 install fonttools

    FontToolsมีเครื่องมือ TTX ซึ่งเปิดใช้งานการแปลงเป็นและจาก XML

  3. แปลงฟอนต์ของคุณเป็น. tx ในโฟลเดอร์เดียวกัน

    ttx myFontFile.otf

  4. ทำการแก้ไขที่จำเป็นใน. tx และลบไฟล์. otf เนื่องจากจะถูกแทนที่ในขั้นตอนถัดไป

  5. แปลงไฟล์กลับเป็น. otf

    ttx myFontFile.ttx


แรงจูงใจ: การแก้ปัญหาโดย kolyuchiยังไม่สมบูรณ์และแม้จะมีขั้นตอนการติดตั้งที่ขยายออกไปนี้การรันยังftxdumperfuserส่งผลให้เกิดข้อผิดพลาดบน 10.15.2 Catalina

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.