আইওএস: পাঠ্য দৈর্ঘ্য অনুসারে ইউআইবাটনটি পুনরায় আকার দিন


134

ইন্টারফেস বিল্ডারে, হোল্ডিং Command+ =এর পাঠ্যের সাথে মানানসই বোতামটির আকার পরিবর্তন করবে। আমি ভাবছিলাম বোতামটি ভিউয়ের সাথে যুক্ত করার আগে প্রোগ্রামযুক্তভাবে এটি করা সম্ভব ছিল কিনা।

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button.titleLabel setFont:[UIFont fontWithName:@"Arial-BoldMT" size:12]];
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
// I need to know the width needed to accomodate NSStringVariable
[button setTitle:NSStringVariable forState:UIControlStateNormal]; 
// So that I can set the width property of the button before addSubview
[button setFrame:CGRectMake(10, 0, width, fixedHeight)];
[subNavigation addSubview:button];

1
এই অতি পুরানো প্রশ্নের জন্য দ্রষ্টব্য: আজকাল (2017), সীমাবদ্ধতাটি কেবল "বৃহত্তর বা সমান" হিসাবে সেট করুন এবং এটি সব কিছু করে। (তাদের নীচে উত্তরটি লক্ষ্য করুন))
ফ্যাটি

@ ফ্যাটি একটি "এর চেয়ে বড় বা সমান " সীমাবদ্ধতা অটোলাউটের সাথে সামঞ্জস্য করার জন্য যথেষ্ট নয় । আজকাল (2017+) এক হয় এমন কিছু বিষয় যা সঠিকভাবে পরিবর্তন করা (Bartłomiej Semańczyk উত্তর) ভিতরে বোতাম মোড়ানো উচিত, অথবা এক UIButton উপশ্রেণী উচিত, হিসাবে stackoverflow.com/a/50575588/1033581
Coeur

হাই @ করিউর - অটোলেআউট করার জন্য অনেক সূক্ষ্মতা রয়েছে। আপনি কিছুটা আলাদা পরিস্থিতি নিয়ে ভাবছেন এটা কি সম্ভব? তবে, ভাগ্যক্রমে, আপনি সম্পূর্ণ ভুল - শুধু চেষ্টা করুন !! কেবলমাত্র একটি ভিউ কন্ট্রোলারে একটি ইউআইবাটন রাখুন। স্পষ্টতই অনুভূমিক এবং উল্লম্ব কেন্দ্রটি সেট করুন। এবং তারপরে একটি> = 100 প্রস্থের সীমাবদ্ধতা যুক্ত করুন। এটি সর্বশেষতম আইওএসে পুরোপুরি কাজ করে।
ফ্যাটি

1
(এখানে নতুন গুগলিংয়ের জন্য নতুন কারও জন্য ........... শুধু টিবিসি আপনাকে কিছু যোগ করতে হবে না, এবং ইউআইবাটন (এছাড়াও ইউআইএলবেল ইত্যাদি) পাঠ্যের পরিবর্তনের সাথে স্বয়ংক্রিয়ভাবে প্রস্থে আকার পরিবর্তন করবে Just সঠিকভাবে H / V অবস্থান সীমাবদ্ধ করুন।)
ফ্যাটি

@Fattie বিক্ষোভের । বিশেষ করে, রানটাইম, এটি মত আচরণ যে: github.com/Coeur/autolayoutButton/blob/master/buttonSelfSizing/...
Coeur

উত্তর:


1

এক্সকোড ৪.৫ এবং তারপরে, এখন ' অটো-লেআউটিং / সীমাবদ্ধতা ' ব্যবহার করে এটি করা যেতে পারে ।

প্রধান সুবিধা হ'ল:

  1. আপনার কোনও প্রোগ্রামক্রমে ফ্রেম সেট করার দরকার নেই!
  2. যদি সঠিকভাবে করা হয়, তবে আপনাকে ওরিয়েন্টেশন পরিবর্তনের জন্য ফ্রেমগুলি পুনরায় সেট করতে বিরক্ত করার দরকার নেই।
  3. এছাড়াও, ডিভাইস পরিবর্তনগুলি আপনাকে বিরক্ত করার দরকার নেই (বিভিন্ন পর্দার আকারের জন্য আলাদাভাবে কোড করার দরকার নেই)।

কয়েকটি অসুবিধা:

  1. পশ্চাদপটে সামঞ্জস্যপূর্ণ নয় - কেবল আইওএস 6 এবং ততোধিকের জন্য কাজ করে।
  2. পরিচিত হওয়া প্রয়োজন (তবে পরে সময় সাশ্রয় করবে)।

সর্বোত্তম বিষয় হ'ল আমরা কোনও অভিপ্রায়টি যেমন:

  • আমি এই দুটি বোতাম একই প্রস্থের হতে চাই; অথবা
  • আমার এই দৃষ্টিভঙ্গিটি উল্লম্বভাবে কেন্দ্রিক হতে হবে এবং সুপারভিউয়ের প্রান্ত থেকে 10 টি পিটিএসের সর্বাধিক প্রসারিত হতে হবে; অথবা এমনকি,
  • আমি চাই যে এই বোতামটি / লেবেলটি প্রদর্শিত হচ্ছে তার অনুসারে এটি আকার পরিবর্তন করতে পারে!

অটো-লেআউটিংয়ের সাথে পরিচিত হওয়ার জন্য এখানে একটি সহজ টিউটোরিয়াল।

একটি জন্য আরো বিস্তারিত জানার

এটি প্রথমে কিছুটা সময় নেয় তবে এটি নিশ্চিতভাবে মনে হয় এটি প্রচেষ্টাটির পক্ষে ভাল হবে।


3
আমি এই উত্তরটি প্রায় মিস করেছি - এর জন্য সত্যিকারের আরও অনেক বেশি ভোট দরকার। এই সমাধানের সাহায্যে কেউ ফন্টের নাম এবং আকার বা আইওএস 7-কেবল কল এম্বেড করা এড়াতে পারে। আমি কেবল আমার ইউআইবাটনটি প্রসারিত করতে চেয়েছিলাম এবং এটিই ছিল of
কার্ল

প্রায় একটি নিখুঁত সমাধান, দুর্ভাগ্যক্রমে আপনি এডজিনেটস শিরোনাম ব্যবহার করলে এটি কাজ করে না: /
জোল্টন

130
এটি একটি দুর্বল উত্তর - এটি স্বয়ংক্রিয়রআউটটির গুণাবলীর বিবরণ দেয়, বরং প্রশ্নকর্তার সমস্যা সমাধানের জন্য কীভাবে অটলয়আউটকে এই পরিস্থিতিতে প্রয়োগ করা যেতে পারে।
ম্যাটসভেন

4
আমি ভাবছিলাম যে এটি করা সম্ভব ছিল যদি প্রোগ্রামিকভাবে উত্তরটি বলে ...
হুয়ান বোয়েরো

ইন্টারফেস বিল্ডার এবং / অথবা প্রোগ্রামমেটিক্যালি @ জুয়ানপাব্লোবায়রোআলভারেজ অটো লেআউট সীমাবদ্ধতা নির্দিষ্ট করা যেতে পারে।
স্লিপ ডি থম্পসন

130

ইউআইকিট-এ, কোনও নির্দিষ্ট ফন্টে রেন্ডার করার সময় প্রদত্ত এনএসএস স্ট্রিং অবজেক্টটি যে আকারটি গ্রহণ করবে তা থেকে পেতে এনএসএসটিং শ্রেণিতে সংযোজন রয়েছে।

ডক্স এখানে ছিল । এখন হয়েছে এখানে অসমর্থিত অধীনে।

সংক্ষেপে, আপনি যদি যান:

CGSize stringsize = [myString sizeWithFont:[UIFont systemFontOfSize:14]]; 
//or whatever font you're using
[button setFrame:CGRectMake(10,0,stringsize.width, stringsize.height)];

... আপনি যে স্ট্রিংটি দিচ্ছেন তার উচ্চতা এবং প্রস্থে আপনি বোতামটির ফ্রেম সেট করে রেখেছেন set

আপনি সম্ভবত সেই সিজি সাইজের আশেপাশে কিছু বাফার স্পেস নিয়ে পরীক্ষা করতে চাইবেন, তবে আপনি সঠিক জায়গায় শুরু করবেন।


4
আইওএসের ডিফল্ট প্যাডিং 12px, 8px এর মতো মনে হচ্ছে।
বেন লাচম্যান

19
সাইজ উইথফন্ট আইওএস 7.0 এ অবমূল্যায়িত হয়েছে। আকার ব্যবহার করুনঅ্যাট্রিবিউটের সাথে: পরিবর্তে
carmen_munich

6
আমি দৃ strongly়ভাবে আর ফ্রেমের সাথে না খেলার পরামর্শ দিচ্ছি, তবে কেবলমাত্র পরিবর্তে বাধা নিয়ে with
গিল বালির

@ গিলস্যান্ড এর জন্য ইন্টারফেস বিল্ডার ব্যবহার করার কোনও উপায় আছে কি?
হুগি

হ্যাঁ, একটি গুগল অনুসন্ধানে আপনাকে প্রচুর দরকারী ফলাফল দেওয়া উচিত
গিল স্যান্ড

101

কোডে এটি করার উপায় হ'ল:

[button sizeToFit];

আপনি যদি সাবক্লাসিং করছেন এবং অতিরিক্ত নিয়ম যুক্ত করতে চান তবে আপনি ওভাররাইড করতে পারেন:

- (CGSize)sizeThatFits:(CGSize)size;

5
সাইজটোফিট ইউআইবাটন বা ইউআইএলবেলের মতো স্ট্যান্ডার্ড নিয়ন্ত্রণগুলিতে পুরোপুরি কাজ করে। আপনি যদি এটি কোনও কাস্টম ইউআইভিউতে করছেন তবে আপনাকে প্রয়োগ করতে হবে -(CGSize)sizeThatFits:(CGSize)size
ক্যামেরন লোয়েল পামার

4
এটি কেবলমাত্র পাঠ্যটি সেট করার পরে রেখে দিলে এটি কাজ করে, অন্যথায় এটি কত বড় হওয়া উচিত সে সম্পর্কে পর্যাপ্ত তথ্য নেই: [button setTitle:@"Your text here" forState:UIControlStateNormal]; [button sizeToFit]; এছাড়াও আপনি যদি পরে পাঠ্য আপডেট করেন তবে তা আবার কল করতে ভুলবেন না।
জুয়ান বোয়েরো

আপনি যে পাঠ্যটি কেবল সেভাবে সেট করেছেন তা নিশ্চিত করুন: [মাই বাটন সেটটাইটেল: @ "আমার শিরোনাম" ফরস্টেট: ইউআইসিএন্ট্রোলস্টেট নরমাল]; আমার পক্ষে এটি বিবৃতি না দেওয়ার আগ পর্যন্ত কাজ হয়নি till
দারিয়াস মিলিয়াসকাস

7
sizeToFit()শিরোনাম প্রান্ত insets সম্মান করে না।
ক্যালিন

32

যদি আপনার বোতামটি ইন্টারফেস বিল্ডার দিয়ে তৈরি করা হয়েছিল এবং আপনি কোডটিতে শিরোনাম পরিবর্তন করছেন তবে আপনি এটি করতে পারেন:

[self.button setTitle:@"Button Title" forState:UIControlStateNormal];
[self.button sizeToFit];

1
আপনার বোতামটি কোড দিয়ে তৈরি করা হলেও আপনি এটি করতে পারেন।
মার্কাস

22

সুইফট:

এখানে গুরুত্বপূর্ণ বিষয়টি হল আপনি কখন ফোন করবেন .sizeToFit(), এটি পাঠ্যটি প্রদর্শন করার জন্য সেট করার পরে হওয়া উচিত যাতে এটি প্রয়োজনীয় আকারটি পড়তে পারে, আপনি যদি পরে পাঠ্য আপডেট করেন, তবে আবার কল করুন।

var button = UIButton()
button.setTitle("Length of this text determines size", forState: UIControlState.Normal)
button.sizeToFit()
self.view.addSubview(button)

18

অটোলেআউট ব্যবহার করে এটি সম্পাদন করতে, ভেরিয়েবল প্রস্থের সীমাবদ্ধতাটি সেট করার চেষ্টা করুন:

প্রস্থ সীমাবদ্ধতা

আপনার নিজের সামঞ্জস্য করতে Content Hugging Priorityএবং Content Compression Resistance Priorityআপনার প্রয়োজনীয় ফলাফলগুলি পেতে প্রয়োজন হতে পারে ।


ইউআইএলবেল সম্পূর্ণ স্বয়ংক্রিয়ভাবে স্ব-আকার ধারণ করছে :

এই ইউআইএলবেলটি কেবল পর্দায় কেন্দ্রীভূত করতে সেট করা হয়েছে (দুটি সীমাবদ্ধতা কেবল অনুভূমিক / উল্লম্ব):

এটি সম্পূর্ণভাবে স্বয়ংক্রিয়ভাবে প্রস্থ পরিবর্তন করে:

আপনার কোনও প্রস্থ বা উচ্চতা সেট করার দরকার নেই - এটি সম্পূর্ণ স্বয়ংক্রিয়।

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

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

লক্ষ্য করুন ছোট হলুদ স্কোয়ারগুলি কেবল সংযুক্ত রয়েছে (শূন্যের "ফাঁক")। ইউআইএলবেল আকার পরিবর্তন করার সাথে সাথে তারা স্বয়ংক্রিয়ভাবে সরে যায়।

একটি "> =" সীমাবদ্ধতা ইউআইএলবেলের জন্য সর্বনিম্ন প্রস্থ নির্ধারণ করে:

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


16

আপনি যদি বোতামটির বিপরীতে পাঠ্যটিকে পুনরায় আকার দিতে চান তবে আপনি ব্যবহার করতে পারেন ...

button.titleLabel.adjustsFontSizeToFitWidth = YES;
button.titleLabel.minimumScaleFactor = .5;
// The .5 value means that I will let it go down to half the original font size 
// before the texts gets truncated

// note, if using anything pre ios6, you would use I think
button.titleLabel.minimumFontSize = 8;

3
* অ্যাডজাস্টসফন্টসাইজেফিটউইথ
ড্যানিয়েল ব্যাং

8

সাইজটোফিট সঠিকভাবে কাজ করে না। পরিবর্তে:

myButton.size = myButton.sizeThatFits(CGSize.zero)

আপনি contentInsetবোতামে যোগ করতে পারেন:

myButton.contentEdgeInsets = UIEdgeInsetsMake(8, 8, 4, 8)


সাইজটিফিট সম্পর্কিত অ্যাপল ডক্স থেকে: // কল করুন সাইজটিটফিট: বর্তমান দেখার সীমা এবং পরিবর্তনের সীমার আকার সহ। সুতরাং এটি সঠিকভাবে কাজ করে আপনাকে কেবল এটি সেট করতে হবে পরে আপনি পাঠ্যটি সেট করবেন set
মার্কাস

5

কেবল:

  1. UIViewচারপাশে দেখার জন্য অটো লেআউট সহ মোড়ক হিসাবে তৈরি করুন ।
  2. UILabelসেই মোড়কের ভিতরে রাখুন । সীমাবদ্ধতা যুক্ত করুন যা মোড়কের প্রান্তগুলিতে আপনার লেবেলকে আটকে থাকবে।
  3. UIButtonআপনার মোড়কের ভিতরে রাখুন , তারপরে সাধারণ হিসাবে একই প্রতিবন্ধকতাগুলি যুক্ত করুন UILabel
  4. পাঠ্যের পাশাপাশি আপনার অটোসাইজড বোতামটি উপভোগ করুন।

1
এটি কি অ্যাক্সেসযোগ্যতার সাথে ভাল খেলছে?
জেসনঝাঁও

4

সুইফট 4.2

Godশ্বরের ধন্যবাদ, এই সমাধান হয়েছে। বোতামে একটি পাঠ্য সেট করার পরে, আপনি একটি ইউআইভিউ থেকে প্রাকৃতিক আকার যা ইন্টারসনিকসন্টেন্টসাইজ পুনরুদ্ধার করতে পারেন (অফিসিয়াল ডকুমেন্টটি এখানে )। ইউআইবাটনটির জন্য আপনি নীচের মতো এটি ব্যবহার করতে পারেন।

button.intrinsicContentSize.width

আপনার তথ্যের জন্য, আমি প্রস্থটি সঠিকভাবে দেখানোর জন্য সামঞ্জস্য করেছি।

button.frame = CGRect(fx: xOffset, y: 0.0, width: button.intrinsicContentSize.width + 18, height: 40)

সিমুলেটার

ইন্টারআইসিসট্যান্টসাইজ সহ ইউআইবাটনগুলি

উত্স: https://riptorial.com/ios/example/16418/get-uibutton-s-size-stly ়ি- বেসড-on- its- text- and- font


1
আপনি কি আরও কিছু প্রসঙ্গ দিতে পারেন? আপনার কোডের লাইনটি প্রশ্নের কোডের সাথে কীভাবে সম্পর্কিত? আপনি প্রস্তাবিত কোডটি কী করে আপনি সংক্ষেপে বলতে পারেন? কেবলমাত্র ব্যাখ্যা হিসাবে লিঙ্ক সরবরাহ করা এই সাইটের জন্য সঠিক ফর্ম্যাট নয় ( কারণগুলির জন্য meta.stackexchange.com/a/8259/266197 দেখুন ) তবে আপনি যদি কিছু ব্যাখ্যা এবং প্রসঙ্গ যুক্ত করেন তবে আপনার উত্তরটি আরও মূল্যবান হয়ে উঠবে!
নোহস

3

আমার এই পোস্টের সাথে সম্পর্কিত কিছু অতিরিক্ত চাহিদা রয়েছে যা sizeToFitসমাধান করে না। পাঠ্যটি নির্বিশেষে আমার বোতামটির মূল অবস্থানটি কেন্দ্রে রাখতে হবে। আমি কখনও চাইনি বাটনটি তার মূল আকারের চেয়ে বড় হোক।

সুতরাং, আমি বাটনটির সর্বাধিক আকারের জন্য বিন্যাস করি, নিয়ামকটিতে সেই আকারটি সংরক্ষণ করি এবং পাঠ্যটি পরিবর্তিত হলে বোতামটি আকার দিতে নিম্নলিখিত পদ্ধতিটি ব্যবহার করি:

+ (void) sizeButtonToText:(UIButton *)button availableSize:(CGSize)availableSize padding:(UIEdgeInsets)padding {    

     CGRect boundsForText = button.frame;

    // Measures string
    CGSize stringSize = [button.titleLabel.text sizeWithFont:button.titleLabel.font];
    stringSize.width = MIN(stringSize.width + padding.left + padding.right, availableSize.width);

    // Center's location of button
    boundsForText.origin.x += (boundsForText.size.width - stringSize.width) / 2;
    boundsForText.size.width = stringSize.width;
    [button setFrame:boundsForText];
 }

1

পাঠ্যের জন্য উচ্চতা স্বতঃসারণযুক্ত এই বাটন শ্রেণি (জ্যামারিনের জন্য তবে অন্য ভাষার জন্য এটি আবারও লেখা যেতে পারে)

[Register(nameof(ResizableButton))]
public class ResizableButton : UIButton
{
    NSLayoutConstraint _heightConstraint;
    public bool NeedsUpdateHeightConstraint { get; private set; } = true;

    public ResizableButton(){}

    public ResizableButton(UIButtonType type) : base(type){}

    public ResizableButton(NSCoder coder) : base(coder){}

    public ResizableButton(CGRect frame) : base(frame){}

    protected ResizableButton(NSObjectFlag t) : base(t){}

    protected internal ResizableButton(IntPtr handle) : base(handle){}

    public override void LayoutSubviews()
    {
        base.LayoutSubviews();
        UpdateHeightConstraint();
        InvalidateIntrinsicContentSize();
    }

    public override void SetTitle(string title, UIControlState forState)
    {
        NeedsUpdateHeightConstraint = true;
        base.SetTitle(title, forState);
    }

    private void UpdateHeightConstraint()
    {
        if (!NeedsUpdateHeightConstraint)
            return;
        NeedsUpdateHeightConstraint = false;
        var labelSize = TitleLabel.SizeThatFits(new CGSize(Frame.Width - TitleEdgeInsets.Left - TitleEdgeInsets.Right, float.MaxValue));

        var rect = new CGRect(Frame.X, Frame.Y, Frame.Width, labelSize.Height + TitleEdgeInsets.Top + TitleEdgeInsets.Bottom);

        if (_heightConstraint != null)
            RemoveConstraint(_heightConstraint);

        _heightConstraint = NSLayoutConstraint.Create(this, NSLayoutAttribute.Height, NSLayoutRelation.Equal, 1, rect.Height);
        AddConstraint(_heightConstraint);
    }

     public override CGSize IntrinsicContentSize
     {
         get
         {
             var labelSize = TitleLabel.SizeThatFits(new CGSize(Frame.Width - TitleEdgeInsets.Left - TitleEdgeInsets.Right, float.MaxValue));
             return new CGSize(Frame.Width, labelSize.Height + TitleEdgeInsets.Top + TitleEdgeInsets.Bottom);
         }
     }
}

1

কিছু কারণে, func sizeToFit()আমার জন্য কাজ করে না। আমার সেট আপটি হ'ল আমি একটি এর ভিতরে একটি বোতাম UITableViewCellব্যবহার করছি এবং আমি স্বয়ংক্রিয় বিন্যাস ব্যবহার করছি।

আমার জন্য যা কাজ করেছে তা হ'ল:

  1. প্রস্থ সীমাবদ্ধতা পেতে
  2. পেতে intrinsicContentSizeপ্রস্থ কারণ এই অনুযায়ী নথি স্বয়ংক্রিয় বিন্যাস সচেতন নয় intrinsicContentSize। প্রস্থকে বাধ্যতা সেট intrinsicContentSizeপ্রস্থ

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

এখানে দুটি শিরোনাম Debug View Hierachry এখানে চিত্র বর্ণনা লিখুন

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


0

সত্য কথা বলতে গেলে আমি মনে করি যে এটি পাঠ্যের সাথে সামঞ্জস্য করার জন্য আপনি বোতামগুলির আকার পরিবর্তন করতে চান তা বলতে স্টোরিবোর্ডে কোনও সাধারণ চেকবক্স নেই really যাইহোক ভাল.

স্টোরিবোর্ড ব্যবহার করে এখানে সর্বাধিক সহজ সমাধান।

  1. ইউআইভিউ রাখুন এবং এর জন্য সীমাবদ্ধতা রাখুন। উদাহরণ: এখানে চিত্র বর্ণনা লিখুন
  2. ইউআইভিউবেলের ভিতরে ইউআইএলবেল রাখুন। এটি ইউআইভিউ প্রান্তের সাথে সংযুক্ত করতে সীমাবদ্ধতা সেট করুন।

  3. আপনার ইউআইবিটনটি ইউআইভিউয়ের মধ্যে রাখুন। এটি ইউআইভিউ প্রান্তের সাথে সংযুক্ত করতে একই সীমাবদ্ধতা সেট করুন।

  4. ইউআইএলবেলের লাইনের সংখ্যার জন্য 0 নির্ধারণ করুন। এখানে চিত্র বর্ণনা লিখুন

  5. আউটলেটগুলি সেট আপ করুন।

    @IBOutlet var button: UIButton!
    @IBOutlet var textOnTheButton: UILabel!
  1. কিছু দীর্ঘ, দীর্ঘ, দীর্ঘ শিরোনাম পান।

    let someTitle = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
  1. ভিউডিডলয়েডে ইউআইএলবেল এবং ইউআইবাটন উভয়ের পক্ষে শিরোনামটি সেট করে।

    override func viewDidLoad() {
        super.viewDidLoad()
        textOnTheButton.text = someTitle
        button.setTitle(someTitle, for: .normal)
        button.titleLabel?.numberOfLines = 0
    }
  1. বোতামটি পুনরায় আকার দেওয়া হয়েছে এবং টিপতে পারে তা নিশ্চিত করতে এটি চালান।

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

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