আমি কি এনএসএলআউটকন্ট্রাইন্টের জন্য গুণক সম্পত্তি পরিবর্তন করতে পারি?


143

আমি একটি তত্ত্বাবধানে দুটি মতামত তৈরি করেছি এবং তারপরে দর্শনের মধ্যে সীমাবদ্ধতা যুক্ত করেছি:

_indicatorConstrainWidth = [NSLayoutConstraint constraintWithItem:self.view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view2 attribute:NSLayoutAttributeWidth multiplier:1.0f constant:0.0f];
[_indicatorConstrainWidth setPriority:UILayoutPriorityDefaultLow];
_indicatorConstrainHeight = [NSLayoutConstraint constraintWithItem:self.view1 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view2 attribute:NSLayoutAttributeHeight multiplier:1.0f constant:0.0f];
[_indicatorConstrainHeight setPriority:UILayoutPriorityDefaultLow];
[self addConstraint:_indicatorConstrainWidth];
[self addConstraint:_indicatorConstrainHeight];

এখন আমি অ্যানিমেশন দিয়ে গুণক সম্পত্তি পরিবর্তন করতে চাই, তবে গুণক সম্পত্তি কীভাবে পরিবর্তন করা যায় তা আমি বুঝতে পারি না। (আমি হেডার ফাইল NSLayoutConstraint.h এ ব্যক্তিগত সম্পত্তিতে _ গুণ খুঁজে পেয়েছি তবে এটি ব্যক্তিগত।

আমি কীভাবে একাধিক সম্পত্তি পরিবর্তন করব?

আমার কাজটি হ'ল পুরানো সীমাবদ্ধতা অপসারণ এবং এর জন্য আলাদা মান সহ নতুনটি যুক্ত করা multipler


1
পুরানো সীমাবদ্ধতা অপসারণ এবং নতুন যুক্ত করার জন্য আপনার বর্তমান পদ্ধতির সঠিক পছন্দ। আমি বুঝতে পারি যে এটি "সঠিক" বোধ করে না, তবে এটি আপনার করার কথা।
রব

4
আমি মনে করি গুণক ধ্রুবক হওয়া উচিত নয়। এটি একটি খারাপ নকশা।
বোরঝ

1
@ বার্জ কেন মাল্টিপ্লায়ারদের মাধ্যমে আমি অভিযোজিত সীমাবদ্ধতা তৈরি করি। আকার পরিবর্তনযোগ্য আইওএসের জন্য।
বিমাওয়া

1
হ্যাঁ, আমি আরও গুণক পরিবর্তন করতে চাই যাতে দেখা যায় এটির প্যারেন্ট ভিউতে অনুপাত রাখতে পারে (উভয় প্রস্থ / উচ্চতা নয় কেবল প্রস্থ বা উচ্চতা), তবে আশ্চর্যজনক বিষয় যা আপেল এটির অনুমতি দেয় না। মানে এটি অ্যাপলের খারাপ নকশা, আপনার নয়।
বোরজ

এটি একটি দুর্দান্ত আলোচনা এবং এটি এবং আরও youtube.com/watch?v=N5Ert6LTruY
ডগকফি 16:55

উত্তর:


117

আইওএস 8 থেকে আপনার যদি কেবল দুটি সেট মাল্টিপ্লায়ারই প্রয়োগ করতে হয় তবে আপনি উভয় সীমাবদ্ধতার সেট সেট করতে পারেন এবং যে কোনও সময় সক্রিয় হওয়া উচিত তা সিদ্ধান্ত নিতে পারেন:

NSLayoutConstraint *standardConstraint, *zoomedConstraint;

// ...
// switch between constraints
standardConstraint.active = NO; // this line should always be the first line. because you have to deactivate one before activating the other one. or they will conflict.
zoomedConstraint.active = YES;
[self.view layoutIfNeeded]; // or using [UIView animate ...]

সুইফ্ট 5.0 সংস্করণ

var standardConstraint: NSLayoutConstraint!
var zoomedConstraint: NSLayoutConstraint!

// ...

// switch between constraints
standardConstraint.isActive = false // this line should always be the first line. because you have to deactivate one before activating the other one. or they will conflict.
zoomedConstraint.isActive = true
self.view.layoutIfNeeded() // or using UIView.animate

2
@ মিমগুয়েন হ্যাঁ, আপনি পারেন :)
জ্যাক

7
আপনার যদি 2 টিরও বেশি সীমাবদ্ধতার প্রয়োজন হয় তবে আপনি যতগুলি চান তার সাথে যুক্ত করতে পারেন এবং তাদের অগ্রাধিকারের বৈশিষ্ট্যগুলি পরিবর্তন করতে পারেন। এইভাবে, 2 টি সীমাবদ্ধতার জন্য আপনাকে একটিকে সক্রিয় এবং অন্যটিকে নিষ্ক্রিয় হিসাবে সেট করতে হবে না, আপনি কেবল অগ্রাধিকারটি উচ্চতর বা নিম্নতর সেট করবেন। উপরের উদাহরণে, স্ট্যান্ডার্ডকন্ট্র্যান্টকে অগ্রাধিকার সেট করুন, আসুন 997 বলুন এবং আপনি যখন এটি সক্রিয় থাকতে চান তখন জুমড কনস্ট্রেন্টের অগ্রাধিকারটি 995 তে সেট করুন, অন্যথায় এটি 999 এ সেট করুন Also এছাড়াও নিশ্চিত করুন যে XIB এর অগ্রাধিকারগুলি 1000 তে সেট করা নেই, অন্যথায় আপনি এগুলি পরিবর্তন করতে পারবেন না এবং আপনি একটি দুর্দান্ত ক্র্যাশ পাবেন।
কুকুর

1
@ ওয়ান্ডারডগের কি কোনও বিশেষ সুবিধা আছে, যদিও? সক্ষম ও অক্ষম করার মূর্খতা আমার কাছে আপেক্ষিক অগ্রাধিকারের বাইরে কাজ করার চেয়ে হজম করা সহজ বলে মনে হয়।
জ্যাক

2
@ ওয়ান্ডারডগ / জ্যাক আমি আপনার পদ্ধতির সমন্বয় ঘটিয়েছি কারণ আমার সীমাবদ্ধতা স্টোরিবোর্ডে সংজ্ঞায়িত করা হয়েছিল। এবং যদি আমি দু'টি প্রতিরোধ তৈরি করে তবে একই অগ্রাধিকারের সাথে ভিন্ন ভিন্ন গুণক উভয়ই তারা বিবাদ করে এবং আমাকে প্রচুর লাল দেয় gave এবং আমি যা বলতে পারি সেগুলি থেকে আপনি আইবির মাধ্যমে কোনওটিকে নিষ্ক্রিয় হিসাবে সেট করতে পারবেন না। তাই আমি অগ্রাধিকার 1000 এবং আমার দ্বিতীয় সীমাবদ্ধতার সাথে আমার মূল সীমাবদ্ধতা তৈরি করেছি যা আমি অগ্রাধিকার 999 (আইবিতে দুর্দান্ত খেলায়) দিয়ে সক্রিয় করতে চাই। তারপরে একটি অ্যানিমেশন ব্লকের ভিতরে আমি প্রাথমিকটির সক্রিয় সম্পত্তিটিকে মিথ্যাতে সেট করেছিলাম এবং এটি দ্বিতীয়টির সাথে দুর্দান্তভাবে অ্যানিমেটেড হয়। সাহায্যের জন্য উভয় ধন্যবাদ!
ক্লে গ্যারেট

2
মনে রাখবেন যে আপনি সম্ভবত আপনার সীমাবদ্ধতার শক্তিশালী রেফারেন্স চান সক্রিয় & তাদের নিষ্ক্রিয়, যেহেতু "সক্রিয় করা বা বাধ্যতা কল নিষ্ক্রিয় addConstraint(_:)এবং removeConstraint(_:)দৃশ্য এই বাধ্যতা দ্বারা পরিচালিত আইটেম নিকটতম সাধারণ পূর্বপুরুষ যে এ"।
কিউস

166

এখানে সুইফটে একটি এনএসএলআউটআউটস্ট্র্যান্ট এক্সটেনশন যা একটি নতুন গুণককে সেট করা বেশ সহজ করে তোলে:

সুইফ্ট 3.0+ এ

import UIKit
extension NSLayoutConstraint {
    /**
     Change multiplier constraint

     - parameter multiplier: CGFloat
     - returns: NSLayoutConstraint
    */
    func setMultiplier(multiplier:CGFloat) -> NSLayoutConstraint {

        NSLayoutConstraint.deactivate([self])

        let newConstraint = NSLayoutConstraint(
            item: firstItem,
            attribute: firstAttribute,
            relatedBy: relation,
            toItem: secondItem,
            attribute: secondAttribute,
            multiplier: multiplier,
            constant: constant)

        newConstraint.priority = priority
        newConstraint.shouldBeArchived = self.shouldBeArchived
        newConstraint.identifier = self.identifier

        NSLayoutConstraint.activate([newConstraint])
        return newConstraint
    }
}

ডেমো ব্যবহার:

@IBOutlet weak var myDemoConstraint:NSLayoutConstraint!

override func viewDidLoad() {
    let newMultiplier:CGFloat = 0.80
    myDemoConstraint = myDemoConstraint.setMultiplier(newMultiplier)

    //If later in view lifecycle, you may need to call view.layoutIfNeeded() 
}

11
NSLayoutConstraint.deactivateConstraints([self])তৈরি করার আগে করা উচিত newConstraint, অন্যথায় এটি সতর্কতার ফলে হতে পারে: একই সাথে সীমাবদ্ধতাগুলি পূরণ করতে অক্ষম । এছাড়াও newConstraint.active = trueযেহেতু অপ্রয়োজনীয় NSLayoutConstraint.activateConstraints([newConstraint])ঠিক একই জিনিস আছে।
tzologa

1
সক্রিয় ও নিষ্ক্রিয়করণ আইওএস 8 এর আগে কাজ করে না, এর কোনও বিকল্প আছে কি ??
নড়হরি_আরজুন

2
আবার গুণক পরিবর্তন করার সময় এটি কাজ করে না, এটি একটি শূন্য মান পায়
জে ডঃ

4
আমাদের সময় বাঁচানোর জন্য ধন্যবাদ! আমি cloneWithMultiplierএটিকে আরও সুস্পষ্ট করে ফাংশনটির নতুন নামকরণ করব যা এটি কেবলমাত্র পার্শ্ব প্রতিক্রিয়া প্রয়োগ করে না বরং একটি নতুন প্রতিবন্ধকতা ফিরিয়ে দেয়
আলেকজান্দ্রে জি

5
মনে রাখবেন যে আপনি যদি গুণকটি সেট করে থাকেন তবে 0.0তা আর আপডেট করতে পারবেন না।
ড্যানিয়েল ঝড়

58

multiplierসম্পত্তি শুধুমাত্র পাঠযোগ্য। আপনাকে পুরানো NSLayoutConstraint অপসারণ করতে হবে এবং এটি পরিবর্তন করতে একটি নতুন দিয়ে এটি প্রতিস্থাপন করতে হবে।

তবে, যেহেতু আপনি জানেন যে আপনি গুণকটি পরিবর্তন করতে চান, তাই পরিবর্তনগুলি যখন প্রয়োজন হয় যা সাধারণত কম হয় তখন আপনি নিজেই এটিকে গুণ করে ধ্রুবকটি পরিবর্তন করতে পারেন।


64
কি বিজোড় মনে হয় যে গুণক কেবল পঠিত হয়। আমি এটা আশা করছিলাম না!
জওি

135
@ জোভি এটি বিদ্রূপাত্মক যে "ধ্রুবক" মান পরিবর্তন করা যেতে পারে যখন গুণকটি করতে পারে না।
টমাস অ্যান্ড্রেল

7
এটা ভুল. একটি এনএসএলআউটআউটস্ট্র্যান্ট একটি অ্যাফাইন (ইন) সমতার সীমাবদ্ধতা নির্দিষ্ট করে। উদাহরণস্বরূপ: "ভিউ 1.বটমওয়াই = এ * ভিউ 2.বটমওয়াই + বি" 'এ' গুণক, 'বি' ধ্রুবক। আপনি কীভাবে বি টিউন করেন না কেন, এটি এ এর ​​মান পরিবর্তন করার মত সমীকরণ তৈরি করতে পারে না।
তমস জহোলা

8
@FruityGeek ঠিক আছে, তাই আপনি ব্যবহার করছেন View2.bottomY'র বর্তমান মান বাধ্যতা এর নিরূপণ করা নতুন ধ্রুবক। এটি ত্রুটিযুক্ত, যেহেতু View2.bottomYএর পুরাতন মান ধ্রুবকটিতে বেক করা হবে, তাই আপনাকে ঘোষণামূলক স্টাইলটি ছেড়ে দিতে হবে এবং যে কোনও সময় View2.bottomYপরিবর্তনের পরিবর্তে ম্যানুয়ালি আপডেট করতে হবে । এই ক্ষেত্রে আপনি ম্যানুয়াল লেআউটটিও করতে পারেন।
তমস জাহোলা

2
এটি ক্ষেত্রে কার্যকর হবে না, যখন আমি চাই NSLayoutConstraint অতিরিক্ত কোড ছাড়াই সীমা পরিবর্তন বা ডিভাইস রোটেশনের জন্য প্রতিক্রিয়া জানায়।
tzologa

49

একটি বিদ্যমান লেআউট সীমাবদ্ধতার গুণক পরিবর্তন করতে আমি একটি সহায়ক ফাংশন ব্যবহার করি । এটি একটি নতুন বাধা তৈরি করে এবং সক্রিয় করে এবং পুরানোটিকে নিষ্ক্রিয় করে।

struct MyConstraint {
  static func changeMultiplier(_ constraint: NSLayoutConstraint, multiplier: CGFloat) -> NSLayoutConstraint {
    let newConstraint = NSLayoutConstraint(
      item: constraint.firstItem,
      attribute: constraint.firstAttribute,
      relatedBy: constraint.relation,
      toItem: constraint.secondItem,
      attribute: constraint.secondAttribute,
      multiplier: multiplier,
      constant: constraint.constant)

    newConstraint.priority = constraint.priority

    NSLayoutConstraint.deactivate([constraint])
    NSLayoutConstraint.activate([newConstraint])

    return newConstraint
  }
}

ব্যবহার, গুণককে 1.2 তে পরিবর্তন করা হচ্ছে:

constraint = MyConstraint.changeMultiplier(constraint, multiplier: 1.2)

1
এটি কি আইওএস 8 থেকে প্রযোজ্য? বা এটি পূর্ববর্তী সংস্করণগুলিতে ব্যবহার করা যেতে পারে
দুরাই আমুথান H

1
NSLayoutConstraint.deactivateফাংশনটি কেবল আইওএস 8.0+।
ইভজেনিই

তুমি কেন তা ফিরিয়ে দিচ্ছ?
mskw

@mskw, ফাংশনটি নতুন সীমাবদ্ধ বস্তুটি তৈরি করে যা এটি তৈরি করে। আগেরটি ফেলে দেওয়া যেতে পারে।
এভেজেনি

42

অ্যান্ড্রু শ্রেইবার উত্তরের জন্য উদ্দেশ্য-সি সংস্করণ

NSLayoutConstraint শ্রেণীর জন্য বিভাগ তৈরি করুন এবং .h ফাইলে এই পদ্ধতিটি যুক্ত করুন

    #import <UIKit/UIKit.h>

@interface NSLayoutConstraint (Multiplier)
-(instancetype)updateMultiplier:(CGFloat)multiplier;
@end

.M ফাইল এ

#import "NSLayoutConstraint+Multiplier.h"

@implementation NSLayoutConstraint (Multiplier)
-(instancetype)updateMultiplier:(CGFloat)multiplier {

    [NSLayoutConstraint deactivateConstraints:[NSArray arrayWithObjects:self, nil]];

   NSLayoutConstraint *newConstraint = [NSLayoutConstraint constraintWithItem:self.firstItem attribute:self.firstAttribute relatedBy:self.relation toItem:self.secondItem attribute:self.secondAttribute multiplier:multiplier constant:self.constant];
    [newConstraint setPriority:self.priority];
    newConstraint.shouldBeArchived = self.shouldBeArchived;
    newConstraint.identifier = self.identifier;
    newConstraint.active = true;

    [NSLayoutConstraint activateConstraints:[NSArray arrayWithObjects:newConstraint, nil]];
    //NSLayoutConstraint.activateConstraints([newConstraint])
    return newConstraint;
}
@end

পরে ভিউকন্ট্রোলারে আপনি আপডেট করতে চান এমন প্রতিবন্ধকতার জন্য আউটলেট তৈরি করুন।

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *topConstraint;

এবং আপনি নীচের মতো যেখানে চান সেখানে গুণক আপডেট করুন ..

self.topConstraint = [self.topConstraint updateMultiplier:0.9099];

আমি এই স্যাম্পল কোডটিতে অ্যাক্টিভেটের মতোই নিষ্ক্রিয় হয়ে গিয়েছি active = trueএবং তাই নিষ্ক্রিয় হওয়ার আগে ডুপ্লিকেট সীমাবদ্ধতা যুক্ত হওয়ার কারণ এটি কিছু পরিস্থিতিতে একটি বাধা ত্রুটির কারণ ঘটায়।
জুলাই

13

আপনি সামান্য গণিত দিয়ে একই লক্ষ্য অর্জনের পরিবর্তে "ধ্রুবক" বৈশিষ্ট্যটি পরিবর্তন করতে পারেন। সীমাবদ্ধতায় আপনার ডিফল্ট গুণকটি 1.0f বলে ধরে নিন। এটি Xamarin C # কোড যা উদ্দেশ্য-সি তে সহজে অনুবাদ করা যায়

private void SetMultiplier(nfloat multiplier)
{
    FirstItemWidthConstraint.Constant = -secondItem.Frame.Width * (1.0f - multiplier);
}

এটি একটি দুর্দান্ত সমাধান
জে ডো

3
উপরের কোডটি কার্যকর করার পরে সেকেন্ড আইটেমের ফ্রেমের প্রস্থ পরিবর্তন হলে এটি ভঙ্গ হবে। ঠিক আছে যদি সেকেন্ড আইটেমটি কখনই আকার পরিবর্তন করে না, তবে সেকেন্ড আইটেম যদি আকার পরিবর্তন করে তবে সীমাবদ্ধতা আর লেআউটটির সঠিক মান গণনা করবে না।
জন স্টিফেন

জন স্টিফেন দ্বারা নির্দেশিত হিসাবে, এটি গতিশীল দর্শন, ডিভাইসগুলির জন্য কাজ করবে না: এটি বিন্যাসের সাথে স্বয়ংক্রিয়ভাবে আপডেট হয় না।
ওম্বল

1
আমার ক্ষেত্রে দুর্দান্ত সমাধান, যার মধ্যে দ্বিতীয় আইটেমের প্রস্থটি আসলে [ইউআইস স্ক্রিন মেইনস্ক্রিন] .বাউন্ডস.সাইজ.উইথ (যা কখনই বদলায় না)
অ্যারিক সেগাল

7

যেমনটি অন্যান্য উত্তরে বর্ণিত হয়েছে: আপনার সীমাবদ্ধতা দূর করতে হবে এবং একটি নতুন তৈরি করতে হবে।


আপনি প্যারামিটার NSLayoutConstraintদিয়ে স্থির পদ্ধতি তৈরি করে নতুন সীমাবদ্ধতা ফিরে আসা এড়াতে inoutপারবেন, যা আপনাকে উত্তীর্ণ বাধা পুনর্নির্ধারণের অনুমতি দেয়

import UIKit

extension NSLayoutConstraint {

    static func setMultiplier(_ multiplier: CGFloat, of constraint: inout NSLayoutConstraint) {
        NSLayoutConstraint.deactivate([constraint])

        let newConstraint = NSLayoutConstraint(item: constraint.firstItem, attribute: constraint.firstAttribute, relatedBy: constraint.relation, toItem: constraint.secondItem, attribute: constraint.secondAttribute, multiplier: multiplier, constant: constraint.constant)

        newConstraint.priority = constraint.priority
        newConstraint.shouldBeArchived = constraint.shouldBeArchived
        newConstraint.identifier = constraint.identifier

        NSLayoutConstraint.activate([newConstraint])
        constraint = newConstraint
    }

}

ব্যবহারের উদাহরণ:

@IBOutlet weak var constraint: NSLayoutConstraint!

override func viewDidLoad() {
    NSLayoutConstraint.setMultiplier(0.8, of: &constraint)
    // view.layoutIfNeeded() 
}

2

আমার নিজের কোডটি মোডেফাই করার চেষ্টা করার পরে আমার পক্ষে কাজ করা উপরের কোনওটিই নয় এই কোডটি এক্সকোড 10 এবং দ্রুত 4.2 এ কাজ করছে

import UIKit
extension NSLayoutConstraint {
/**
 Change multiplier constraint

 - parameter multiplier: CGFloat
 - returns: NSLayoutConstraintfor 
*/i
func setMultiplier(multiplier:CGFloat) -> NSLayoutConstraint {

    NSLayoutConstraint.deactivate([self])

    let newConstraint = NSLayoutConstraint(
        item: firstItem,
        attribute: firstAttribute,
        relatedBy: relation,
        toItem: secondItem,
        attribute: secondAttribute,
        multiplier: multiplier,
        constant: constant)

    newConstraint.priority = priority
    newConstraint.shouldBeArchived = self.shouldBeArchived
    newConstraint.identifier = self.identifier

    NSLayoutConstraint.activate([newConstraint])
    return newConstraint
}
}



 @IBOutlet weak var myDemoConstraint:NSLayoutConstraint!

override func viewDidLoad() {
let newMultiplier:CGFloat = 0.80
myDemoConstraint = myDemoConstraint.setMultiplier(newMultiplier)

//If later in view lifecycle, you may need to call view.layoutIfNeeded() 
 }

ধন্যবাদ,
ঠিকঠাক

স্বাগতম রডু-উর্শাচে
উল্লাস পুজারি

2

হ্যাঁ ডাব্লু গুণক মান পরিবর্তন করতে পারে কেবল এনএসএলআউটকন্ট্রেন্টের একটি এক্সটেনশান করে এবং এটি ব্যবহার করে ->

   func setMultiplier(_ multiplier:CGFloat) -> NSLayoutConstraint {

        NSLayoutConstraint.deactivate([self])

        let newConstraint = NSLayoutConstraint(
            item: firstItem!,
            attribute: firstAttribute,
            relatedBy: relation,
            toItem: secondItem,
            attribute: secondAttribute,
            multiplier: multiplier,
            constant: constant)

        newConstraint.priority = priority
        newConstraint.shouldBeArchived = shouldBeArchived
        newConstraint.identifier = identifier

        NSLayoutConstraint.activate([newConstraint])
        return newConstraint
    }

            self.mainImageViewHeightMultiplier = self.mainImageViewHeightMultiplier.setMultiplier(375.0/812.0)

1

কোডে সক্রিয় সীমাবদ্ধতা পরিবর্তন করে স্যুইচ করুন অন্য অনেক উত্তর দ্বারা প্রস্তাবিত আমার জন্য কাজ করে না। সুতরাং আমি 2 টি প্রতিবন্ধকতা তৈরি করেছি, একটি ইনস্টল করা হয়েছে এবং অন্যটি নয়, কোডে উভয়কে আবদ্ধ করুন, এবং তারপরে একটি সরিয়ে অন্যটিকে যুক্ত করে স্যুইচ করুন।

সম্পূর্ণতার জন্য, সীমাবদ্ধতার সাথে আবদ্ধ করতে মাউসের ডান বোতামটি ব্যবহার করে কোডটিতে সীমাবদ্ধতাটি টানুন, ঠিক যেমন অন্যান্য গ্রাফিক উপাদানগুলির মতো:

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

আমি একটি অনুপাতপ্যাড এবং অন্যটি অনুপাত আইফোনটির নাম দিয়েছি।

তারপরে ভিউডিডলডে নিম্নলিখিত কোডটি যুক্ত করুন

override open func viewDidLoad() {
   super.viewDidLoad()
   if ... {

       view.removeConstraint(proportionIphone)
       view.addConstraint(proportionIpad) 
   }     
}

আমি এক্সকোড 10 এবং সুইফ্ট 5.0 ব্যবহার করছি


0

সি # তে @ টিয়ানফুর উত্তরের ভিত্তিতে একটি উত্তর এখানে দেওয়া হয়েছে। সীমাবদ্ধতাগুলির অ্যাক্টিভেশন এবং নিষ্ক্রিয়করণের প্রয়োজন এমন অন্যান্য উত্তরগুলি আমার পক্ষে কার্যকর হয়নি।

    var isMapZoomed = false
@IBAction func didTapMapZoom(_ sender: UIButton) {
    let offset = -1.0*graphHeightConstraint.secondItem!.frame.height*(1.0 - graphHeightConstraint.multiplier)
    graphHeightConstraint.constant = (isMapZoomed) ? offset : 0.0

    isMapZoomed = !isMapZoomed
    self.view.layoutIfNeeded()
}

0

গুণকের মান পরিবর্তন করার জন্য, নীচের পদক্ষেপগুলি অনুসরণ করুন: 1. প্রয়োজনীয় সীমাবদ্ধতার জন্য আউটলেটগুলি তৈরি করুন যেমন কিছু কনসেন্ট্রেন্ট। 2. পরিবর্তন মত গুণক মান someConstraint.constant * = 0.8 বা কোনো গুণক মান।

এটা খুশী কোডিং।


-1

একজন পড়তে পারেন:

var multiplier: CGFloat
The multiplier applied to the second attribute participating in the constraint.

এই ডকুমেন্টেশন পৃষ্ঠায় । এর অর্থ কি এই নয় যে কোনওটির গুণক পরিবর্তন করতে সক্ষম হওয়া উচিত (যেহেতু এটি একটি ভ্যার)?


var multiplier: CGFloat { get }সংজ্ঞাটি যার অর্থ এটি কেবল একজন গ্রাহক থাকে।
জনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.