SwiftUI পাঠ্য-প্রান্তিককরণ


97

Textভিউয়ের অনেক বৈশিষ্ট্যের মধ্যে আমি পাঠ্য সারিবদ্ধকরণের সাথে সম্পর্কিত কোনওটি খুঁজে পেলাম না। আমি একটি ডেমোতে দেখেছি যে এটি স্বয়ংক্রিয়ভাবে আরটিএল পরিচালনা করে এবং ভিউ ব্যবহার করে স্টাফ রাখার সময় bodyএটি সর্বদা স্বয়ংক্রিয়ভাবে কেন্দ্র করে centers

এমন কোনও ধারণা আছে যা আমি লেআউট সিস্টেমটি অনুপস্থিত SwiftUIএবং যদি না হয় তবে আমি কীভাবে পাঠ্য সারিবদ্ধ বৈশিষ্ট্যগুলি সেট করতে পারি Text?

উত্তর:



96

SwiftUI বিটা 3 ফরোয়ার্ড থেকে, আপনি ফ্রেম সংশোধকটির সাহায্যে একটি পাঠ্য দৃশ্যকে কেন্দ্র করতে পারেন:

Text("Centered")
    .frame(maxWidth: .infinity, alignment: .center)

49

এখানে নিজেকে অন্য উত্তরগুলির উল্লেখ হিসাবে Text.multilineTextAlignment(_:)/ VStack(alignment:)/ frame(width:alignment:)তবে প্রতিটি সমাধান একটি নির্দিষ্ট সমস্যা সমাধান করে বলে নিজেকে বোঝার চেষ্টা করছিল । শেষ পর্যন্ত এটি ইউআই প্রয়োজনীয়তা এবং এর সংমিশ্রণের উপর নির্ভর করে।


VStack(alignment:)

alignmentএখানে একে অপরের নিজ নিজ মধ্যে ভেতরের দেখা যায়।
সুতরাং নির্দিষ্ট করা .leadingসমস্ত অভ্যন্তরীণ দৃষ্টিভঙ্গিগুলিকে তাদের শীর্ষস্থানীয় একে অপরের সাথে একত্রিত করতে সংযুক্ত করবে।

VStack(alignment: .leading, spacing: 6) {
  Text("Lorem ipsum dolor")
        .background(Color.gray.opacity(0.2))
  Text("sit amet")
        .background(Color.gray.opacity(0.2))
}
.background(Color.gray.opacity(0.1))

চিত্র


.frame

ইন frame(width:alignment:)বা frame(maxWidth:alignment:), alignmentদেওয়া প্রস্থ মধ্যে বিষয়বস্তু জন্য।

VStack(alignment: .leading, spacing: 6) {
  Text("Lorem ipsum dolor")
      .background(Color.gray.opacity(0.2))
  Text("sit amet")
      .background(Color.gray.opacity(0.2))
}
.frame(width: 380, alignment: .trailing)
.background(Color.gray.opacity(0.1))

অভ্যন্তরীণ দৃষ্টিভঙ্গি একে অপরের সাথে প্রান্তিকভাবে নেতৃত্ব দিচ্ছে তবে নিজস্ব মতামতগুলি স্বতন্ত্রভাবে প্রান্তিকভাবে প্রসারিত হচ্ছে VStack

চিত্র


.multilineTextAlignment

এটি পাঠ্যের অভ্যন্তরে প্রান্তিককরণ নির্দিষ্ট করে এবং একাধিক লাইন থাকে অন্যথায় সংজ্ঞায়িত ব্যতীত frame(width:alignment), প্রস্থটি স্বয়ংক্রিয়ভাবে সামঞ্জস্য হয় এবং ডিফল্ট alignmentএর দ্বারা প্রভাবিত হয়ে যায় তখন সেরা দেখা যায় ।

VStack(alignment: .trailing, spacing: 6) {
  Text("0. automatic frame\n+ view at parent's specified alignment\n+ multilineTA not set by default at leading")
    .background(Color.gray.opacity(0.2))
  Text("1. automatic frame\n+ view at parent's specified alignment\n+ multilineTA set to center")
  .multilineTextAlignment(.center)
  .background(Color.gray.opacity(0.2))
  Text("2. automatic frame\n+ view at parent's specified alignment\n+ multilineTA set to trailing")
  .multilineTextAlignment(.trailing)
  .background(Color.gray.opacity(0.2))
}
.frame(width: 380, alignment: .trailing)
.background(Color.gray.opacity(0.1))

চিত্র


সংমিশ্রণ সহ পরীক্ষা:

VStack(alignment: .trailing, spacing: 6) {
  Text("1. automatic frame, at parent's alignment")
  .background(Color.gray.opacity(0.2))
  Text("2. given full width & leading alignment\n+ multilineTA at default leading")
  .frame(maxWidth: .infinity, alignment: .leading)
  .background(Color.gray.opacity(0.2))
  Text("3. given full width & center alignment\n+ multilineTA at default leading")
  .frame(maxWidth: .infinity, alignment: .center)
  .background(Color.gray.opacity(0.2))
  Text("4. given full width & center alignment\n+ multilineTA set to center")
  .multilineTextAlignment(.center)
  .frame(maxWidth: .infinity, alignment: .center)
  .background(Color.gray.opacity(0.2))
  Text("5. given full width & center alignment\n+ multilineTA set to trailing")
  .multilineTextAlignment(.trailing)
  .frame(maxWidth: .infinity, alignment: .center)
  .background(Color.gray.opacity(0.2))
  Text("6. given full width but no alignment\n+ multilineTA at default leading\n+ leading is based on content, looks odd sometimes as seen here")
  .frame(maxWidth: .infinity)
  .background(Color.gray.opacity(0.2))
}
.frame(width: 380)
.background(Color.gray.opacity(0.1))

চিত্র


4
এটি একটি খুব জোরালো উত্তর। ধন্যবাদ. আমি এটিকেও একটি গ্রহণযোগ্য উত্তর হিসাবে বিবেচনা করব।
inokey

4
@ নোকি আমার পর্যবেক্ষণগুলি ভাগ করে নিয়ে আনন্দিত :) পরে আমি একটি আকর্ষণীয় নিবন্ধটি দেখতে পেয়েছি যা সাধারণভাবে অ্যালাইনমেন্টগুলি গভীরতার সাথে আরও গভীরভাবে চলছে: সুইফটইউয়ায় অ্যালাইনমেন্ট গাইডস
স্ট্যাটিকভিডম্যান

অসাধারণ স্টাফ মানুষ। আমি মূলত এই প্রশ্নটি পোস্ট করার পর থেকেই সুইফটআইআই সত্যই বিকশিত হয়েছিল।
inokey

17

আমি আসলে সেই সমস্যাটিতে এসে পৌঁছেছি যেখানে আমাকে একটি লাইনে পাঠ্য সারিবদ্ধ করতে হয়েছিল। আমি যা কাজ করতে পেয়েছি তা হ'ল:

Text("some text")
    .frame(alignment: .leading)

যদি আপনি এটি ফ্রেম প্রস্থের প্যারামিটারের সাথে একত্রিত করেন তবে আপনি লেবেলগুলির জন্য কিছু দুর্দান্ত টেক্সট ব্লক ফর্ম্যাটিং পেতে পারেন such


15

আমার ধারণা SwiftUIআমরা এই জাতীয় জিনিসগুলির জন্য স্ট্যাকের মতো মোড়ক ব্যবহার করি ।

সুতরাং এর মতো কিছু লেখার পরিবর্তে Text("Hello World").aligned(.leading)নিম্নলিখিতগুলি উত্সাহিত করা হয়েছে:

VStack(alignment: .leading) {
    Text("Hello World")
}

4
সুতরাং আমি কেবল স্ট্যাকের চেয়ে পৃথক একটি লেবেল ড্রপ করতে পারি না?
ইনোকি

@inokey আমি কমপক্ষে এর জন্য কোনও সংশোধক খুঁজে পাইনি।
ফ্রেডপি

আমিও করিনি। আমার কাছে মনে হচ্ছে এসআইআই থেকে আমি কোনও ধরণের বেস ধারণাটি মিস করছি। আমি দু'টি জিনিসের মধ্যে "ভিউ" এর মতো এমনকি ড্রপও করতে পারি না এবং এটিকে একটি রঙও দিতে পারি, যেমন তাদের কাছে সেখানে কোনও সাধারণ-লা-ইউভিউ অবজেক্ট নেই।
inokey

ফ্রেম
সংশোধকটির

করতে বোকা লাগে (যদিও এটি কাজ করে)। আপনি কোথায় শুনেছেন যে এটি উত্সাহিত হয়েছিল?
মোবাইলমনে

6

আমাদের পাঠ্যটি প্রান্তিককরণ করতে হবে এটির স্ট্যাকটি নয় So তাই কল করা multilineTextAlignment(.center)এবং রেখার সীমাটি নির্ধারণ করে আমি পাঠ্যগুলিকে কেন্দ্রে বিন্যস্ত দেখতে পাব। আমি জানি না কেন আমাকে লাইন সীমাটি নির্ধারণ করতে হবে, আমি ভেবেছিলাম আপনার যদি একটি বড় পাঠ্য থাকে তবে এটি প্রসারিত হবে।

Text("blahblah")
        .font(.headline)
        .multilineTextAlignment(.center)
        .lineLimit(50)

6

আপনি যদি পাঠ্যের জন্য ধ্রুবক প্রস্থ রাখতে চান, কেবলমাত্র এক লিখিত পাঠ্য না হওয়া পর্যন্ত ".multlineTextAlignment (.leading)" কোনও প্রভাব ফেলবে না।

এটি আমার জন্য কাজ করে এমন সমাধান:

struct LeftAligned: ViewModifier {
    func body(content: Content) -> some View {
        HStack {
            content
            Spacer()
        }
    }
}


extension View {
    func leftAligned() -> some View {
        return self.modifier(LeftAligned())
    }
}

ব্যবহার:

Text("Hello").leftAligned().frame(width: 300)

4

শীর্ষস্থানীয় হিসাবে আপনি উল্লম্ব স্ট্যাকভিউয়ের জন্য প্রান্তিককরণ সেট করতে পারেন। নীচের মত

 VStack(alignment: .leading) {
            Text("Turtle Rock")
                .font(.title)
            Text("Joshua Tree National Park")
                .font(.subheadline)
        }

এখানে চিত্র বর্ণনা লিখুন


2

আমি Spacer()পাঠ্য ব্লক সারিবদ্ধ করার জন্য ভিউটি ব্যবহার করতে চাই । এই উদাহরণটি অনুসরণের দিকে পাঠ্য দেখায়:

HStack{
    Spacer()
    Text("Wishlist")
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.